Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
°¢Àï°Í°Í¿ªÔ´Ç°¶Ë¿ò¼Ü--Weexʵ¼ù
 
  3786  次浏览      27
  2019-1-8
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔCSDN£¬ÎÄÕ½éÉÜÁËWeexµÄ¿ª·¢ÀûÆ÷weex-toolkit,ÒÔ¼°ÔõÑùʹÓá¢Íê³ÉÏîÄ¿µÄ´î½¨µÈÏà¹ØÄÚÈÝ¡£

ÀûÆ÷

Ë×»°Ëµ£¬Óû񻃮ÆäÊ£¬±ØÏÈÀûÆäÆ÷¡£¶ÔÓÚ¿ª·¢Weex£¬±¾È˲¢²»ÍƼöÂã±¼¡£ÊʺϵŤ¾ß£¬ÄÜÈÃÄãµÄ¹¤×÷ʰ빦±¶¡£

¿ìËÙ³¢ÏÊ

ÎÒÃÇÔÚÄÚÍø»·¾³´î½¨ÁËÒ»¸öÔÚÏß°æµÄ±à¼­Æ÷ºÍÔ¤ÀÀ¹¤¾ß£¬Èç¹ûÄãÏ£Íû¿ìËÙ³¢ÏʺÍÊÔ´í£¬¿ÉÒÔÖ±½Ó·ÃÎÊhttp://weex.alibaba-inc.com/playground£¬²¢°´ÈçϲÙ×÷¼´¿É£º

×¼±¸¿ª·¢»·¾³

ÔÚ½øÐб¾µØ¿ª·¢Ö®Ç°£¬ÄãÐèҪ׼±¸Ò»Ì¨ÄÜ˳ÀûµÄÔËÐÐBashÃüÁîµÄµçÄÔ£¬±ÈÈçMac Book Pro¡£¶ø¶ÔÓÚÖÓÇéÓÚWindowsµÄͬѧÀ´Ëµ£¬WeexµÄһϵÁй¤¾ß²¢Ã»ÓжÔWindows»·¾³×öÌØÊâµÄÊÊÅ䣬ËùÒÔ¿¼ÂÇWindowsÉϵĿª·¢ÌåÑ飬ǿÁÒ½¨ÒéÏÂÔØÒ»¸öcmderÀ´ÔËÐи÷ÖÖÃüÁî¡£

˵ÍêÁËÃüÁîÐй¤¾ß£¬¼òµ¥Ç¿µ÷ÏÂÈí¼þ»·¾³£ºNodejs >= 4.0¡£

¿ª·¢µ¥¶ÀÒ³Ãæ

WeexµÄÒ»¸öÓÅÊÆ¾ÍÊÇÄÜ¿ìËÙ¿ª·¢²¢ÉÏÏßÒ»¸ö¿ÉÒÔÔËÐÐÓÚÈý¶ËµÄÒ³Ãæ£¬Îª´ËЧÂʾͺÜÖØÒª¡£ËùÒÔ£¬±¾ÈËÒªÍÆ¼öWeexµÄ¿ª·¢ÀûÆ÷weex-toolkit¡£Ëü¿ÉÒÔͨ¹ýnpm°²×°µ½Äã±¾»úµÄÈ«¾Ö»·¾³ÖУ¨npm i weex-toolkit -g£©£¬´Ó´ËÄãµÄ¿ª·¢»·¾³Ï¾ͶàÁËÒ»¸öÉñÆæµÄÃüÁîweex¡£

Ê×ÏÈ£¬¿ÉÒÔÓÃÉñÆæµÄweexÃüÁî´´½¨Ò»¸öʾÀýÎļþ£º

weex create helloworld

È»ºóËæ±ã±à¼­µãʲô£¬±ÈÈ磺

<template>
<div class="wxc-hellworld">
<text>Hello Weex</text>
</div>
</template>

½ô½Ó×Å£¬ÔÙÔËÐÐÄǸöÉñÆæµÄÃüÁ

weex helloworld.we

Ã͵ػá³öÏÖÒ»¸ö˶´óµÄ¶þάÂë£¬Ãæ¶ÔÕâ¸ö¶þάÂë¿ÉǧÍò²»ÒªãÂȦ£¬ÇëºÍÎÒÒ»ÆðÏÂÔØÁíÒ»¸öÉñÆ÷Weex Playground¡£

µ±ÓÃÕâ¸öÉñÆæµÄɨÂ빦ÄÜɨÃèÕâ¸ö¶þάÂ룬¾ÍÄÜչʾHello WeexµÄ½çÃæ¡£²¢ÇÒ£¬Õâ¸ö¶þάÂëÖ§³ÖLive Reload¡£ÈκζÔhelloworld.weµÄ¸Ä¶¯¶¼»áÁ¢¼´¸üÐÂPlaygroundÀïËùչʾµÄ½çÃæ¡£

´î½¨ÍêÕû¹¤³Ì

²»¹ý£¬¶ÔÓÚÎÒÃÇÕâЩ¿à±ÆµÄǰ¶Ë¹¥³ÇʦÀ´Ëµ£¬ÏÖÔÚÈκÎÒ»¸ö»î¶¯¶¼Ã»·¨ÓÃÒ»¸ö¼òµ¥Ò³ÃæÀ´¸ã¶¨ÁË£¬¸ü²»ÓÃ˵¸´ÔӵIJúÆ·¡£ËùÒÔ£¬Ò»¸ö´ó¶øÃÀµÄ¹¤³Ì²ÅÄÜÌî²¹ÐÄÖеÄÒõÓ°¡£

Èç¹ûÄãÊÇһλ°ßÂíÆ½Ì¨µÄ´ØÓµÕߣ¬½¨ÒéÄãÖ±½Ó·ÃÎʰßÂíÆ½Ì¨µÄ°ïÖúÎĵµÀ´Íê³ÉÕâ¼þÊÂÇ飺Weex for Zebra¡£

¶ø½ÓÏÂÀ´£¬ÎÒÏëÒªÏêϸ²ûÊöµÄÊDz»ÒÀÀµÌض¨Æ½Ì¨µÄWeex¹¤³Ì´î½¨¡£

½ÅÊÖ¼Ü

Adam£¬Ñǵ±£¬Ò»ÇÐÖ®Ô´¡£ÓÃÁËËü£¬ÔÙÒ²²»Óõ£ÐĵÚÒ»´ÎµÄÞÏÞÎÁË¡£

ºÃÁË£¬Ó²¹ãʱ¼ä½áÊø¡£Èç¹ûÒª´î½¨¹¤³Ì£¬½ÅÊÖ¼ÜÊDz»¿É»ñÈ¡µÄ¡£ÕâÀïÍÆ¼öÒ»¸ö½Ð×öadamµÄ½ÅÊּܹ¤¾ß£¬²»½ö¼òµ¥Ò×Ó㬻¹ÄÜÇáËɵĴ´½¨Äã×Ô¼ºÏëÒªµÄ½ÅÊּܡ£Ê×ÏÈ£¬Í¨¹ýtnpm°²×°¡£

tnpm i @ali/adam -g

È»ºó£¬Ìí¼ÓWeexµÄ½ÅÊּܣº

adam tpl add weex

½ô½Ó×Å£¬ÔÚij¸ö¿ÕĿ¼Ï£¬ÔËÐÐadam£¬²¢¸ù¾ÝÌáʾÍê³É³õʼ»¯¡£

½Å±¾

Õâ¸ö½ÅÊּܹ¤³ÌÖаüº¬ÁË»ù±¾µÄ¿ª·¢ÃüÁͨ¹ýnpm i°²×°ÍêÒÀÀµºó£¬¾Í¿ÉÒÔÓÃÕâЩ½Å±¾À´½øÐпª·¢ÁË£º

ת»»srcĿ¼ÏµÄËùÓÐ.weÎļþ£¬²¢Êä³öµ½distĿ¼ÏÂ

npm run build

¼àÌý.weÎļþµÄ¸Ä¶¯£¬²¢¸üÐÂdistĿ¼ÏµÄÏàÓ¦Îļþ

npm run dev

Ô¤ÀÀH5°æÒ³Ãæ

npm run serve -- -p 3000

ÔÚä¯ÀÀÆ÷Öдò¿ª£ºhttp://localhost:3000/index.html?page=dist/welcome.js

Éú³É¹©PlaygorundɨÃèµÄ¶þάÂë

npm run qr -- src/welcome.we

Æô¶¯µ÷ÊÔ¹¤¾ß£¨ÏÂÃæÓÐÕ½ھßÌåÁÄÕâ¸öÊ£©

npm run debugger

ÓÐÁËÉÏÊöÕâô¶àÀûÆ÷£¬¿ª·¢WeexÕæÊÇ̫ˬÁË£¡

Ä¥µ¶²»Îó¿³²ñ¹¤

ÓÐÁËÀûÆ÷ºó£¬ÏȲ»Ã¦×ÅÉÏÊÖ£¬ÒòΪÄ㻹ҪÏÈѧ»áÔõô²Ù¿ØËü£¬ÈÃËüÄÜÓëÄãÈËÆ÷ºÏÒ»¡£

ÎļþĿ¼½á¹¹

WeexĬÈϵÄÎļþ½á¹¹ÊÇÒªÇóËùÓÐÏà¹ØµÄweÎļþ¶¼ÔÚͬһ¼¶Ä¿Â¼Ï£¬ÒÔ±ãÄÜ׼ȷµÄÕÒµ½ÒÀÀµµÄ×é¼þ£¬ÀýÈ磺

bar.we

<template>
<div><text>bar</text></div>
</template>

foo.we

<template>
<div><bar></bar></div>
</template>

µ±ÐèÒªÌáȡһЩ¹«¹²×é¼þ£¬ÕâЩ¹«¹²×é¼þÒ»°ã´æ·ÅÔÚÒ»¸ö¹«¹²Ä¿Â¼Ï£¨×Ô½¨µÄĿ¼»òͨ¹ýnpm°²×°µ½node_modulesĿ¼£©£¬¶øÕâÑùµÄÎļþ½á¹¹£¬Ò²ÍùÍù³öÏÖÔÚһЩÍêÕûµÄÏîÄ¿¹¤³ÌÖУ¬µ±Í¨¹ýÉÏÊöµÄ½ÅÊּܴºÃʾÀý¹¤³ÌÊÖ£¬¿ÉÒÔͨ¹ýǰ¶Ëϰ¹ßµÄrequire·½Ê½À´ÒýÓ÷ÇÏàͬĿ¼ÏµÄweÎļþ£¬ÀýÈ磺

components/bar.we

<template>
<div><text>bar</text></div>
</template>

foo.we

<template>
<div><bar></bar></div>
</template>

<script>
require('./components/bar')
</script>

Æä±³ºóµÄÔ­Àí£¬Êµ¼ÊÉÏÊÇÕû¸öת»»ºÍ´ò°ü¹ý³Ì½èÖúÁËwebpackÒÔ¼°weex-loader£¬Ê¹µÃÆäÖеÄÄ£¿é»¯¶¨Òå×ñÑ­±ê×¼µÄThe way of CommonJS¡£

ÒýÓñê×¼JSÎļþ

ÓÐÁËwebpackµÄÖúÁ¦£¬ÔÚweÎļþÖУ¬Ò²ÄÜÇáËÉʹÓÃÒ»¸ö·ûºÏCommonJS¹æ·¶µÄJSÎļþ¡£ÀýÈ磬ͨ¹ýnpm°²×°ÁËÒµ½çNo.1µÄ¹¤¾ß¿âlodash£º

foo.we

<template>
<div><text>{{foo + bar}}</text></div>
</template>

<script>
var _ = require('lodash')
module.exports = {
data: {
foo: 'foo',
bar: 'bar'
},
created: function() {
_.assign(this.data, {foo: 'the foo', bar: 'the bar'})
}
}
</script>

ÓÃÉÏTomorrow's cssºÍES2015

Èç½ñǰ¶ËµÄ¿ª·¢£¬Ò»°ãÀë²»¿ªÔ¤´¦ÀíÆ÷£¬±ÈÈçpostcssºÍbabel¡£ÔÚĬÈϵÄweÎļþÖУ¬¼´Ê¹ÓÐwebpackµÄÖúÁ¦£¬ÕâÀàÔ¤´¦ÀíÆ÷Ò²ÊÇ¶ÔÆäÎÞÄÜΪÁ¦µÄ¡£Îª´Ë£¬ÎÒÃÇÐèÒª²ð·ÖÕâ¸öweÎļþ£¬ÈÃËü±ä³É±ê×¼µÄhtml¡¢css»òjsÎļþ¡£

bar.we.html

<template>
<div><text class="hello">Hello {{name}}</text></div>
</template>

bar.we.css

.hello {
font-size: 40px;
color: #333;
}

bar.we.js

module.exports = {
template: require('./foo.we.html'),
style: require('./foo.we.css'),
data: {
name: 'Weex'
}
}

²¢ÇÒ£¬ÐèÒªÔÚwebpack.config.jsÖмÓÈ뼸¸öÄܽâÎöÕâÐ©ÌØÊâÎļþµÄloader£º

loaders: [
{
test: /\.we\.js(\?[^?]+)?$/,
loaders: ['weex?type=script']
},
{
test: /\.we\.css(\?[^?]+)?$/,
loaders: ['weex?type=style']
},
{
test: /\.we\.html(\?[^?]+)?$/,
loaders: ['weex?type=tpl']
}
]

Ö®ºó£¬ÈÔȻʹÓÃrequireµÄ·½Ê½À´ÒýÓÃÕâ¸ö'we'Îļþ£º

foo.we

<template>
<div><bar></bar></div>
</template>

<script>
require('./bar.we.js')
</script>

µ±·Ö¸îÁËweÎļþºó£¬Äã¾Í¿ÉÒÔ·Ö±ð¶ÔÆäÖеÄcss»òjsÎļþʹÓÃÄãÏëÒªµÄÔ¤´¦ÀíÆ÷¡£

²»¹ýÐèÒªÌØ±ðÌáÐѵÄÊÇ£¬Ä¿Ç°weex-loaderÖ»Ö§³Ömodule.exports={...}µÄÄ£¿éÊä³ö·½Ê½£¬ËùÒÔ¼´Ê¹ÄãÔÚjsÎļþÖÐÓÃÁËES6µÄimport£¬µ«ÇëÎðʹÓÃexportÀ´µ¼³öÄ£¿é

´¬µ½ÇÅÍ·×ÔȻֱ

ÔÚʵ¼Ê½øÐÐWeex¿ª·¢Ê±£¬²»ÃâÓöµ½Ò»Ð©ÁîÈËÀ§»óµÄÎÊÌâ¡£ÁíÍ⣬ҲÓпÉÄÜдµÄ´úÂëûÄÇô¾«Õ¿¶øÊ¹µÃ¹¤³ÌÖÊÁ¿»ò²úÆ·ÐÔÄÜ´ï²»µ½Ô¤ÆÚ¡£±ÊÕß×÷Ϊjs-frameworkµÄÖ÷Òª¿ª·¢ÕßÖ®Ò»£¬ËäȻҲûд¹ý¶àÉÙ²úÆ·´úÂ룬µ«Æ¾½è¶Ôjs-frameworkµÄÉîÈëÀí½â£¬ÒÔ¼°¶ÔÖÚ¶àÒµÎñµ±Öв۵ãµÄÆÊÎö£¬¾¡Á¿¸ø´ó¼Ò³ÊÏÖһЩ¿ª·¢ÉϵÄʵ¼ù·½°¸¡£²»Çó×î¼Ñ£¬µ«Çó×îʵÓᣣ¨×¢£ºÒÔϹ۵㣬²»·ÖÏȺó£©

µ÷ÓÃnativeÌṩµÄÄ£¿é·½·¨

WeexµÄ´úÂë±¾ÉíÊÇÔËÐÐÔÚjsµÄruntimeϵģ¬ËùÒÔΪÁ˺Ínative½øÐÐͨѶ£¬¾ÍÐèÒª½èÓÉhybridµÄ·½Ê½¡£ÆäÖУ¬¶ÔÓÚnativeÌṩµÄһϵÁÐÄ£¿é·½·¨£¬¾ÍÐèÒªÓÃÒ»ÖÖÌØÊ⣬µ«Ö±¹ÛµÄ·½Ê½À´µ÷Óá£

Ô­±¾£¬WeexÖм¯³ÉÁËһЩԤ¶¨ÒåµÄAPI£¬ÀýÈçthis.$sendMtop¡£µ«ÕâЩԤ¶¨ÒåAPIµÄά»¤³É±¾¹ý¸ß£¬Òò´ËÔÚ×îÐÂÉõÖÁÒÔºóµÄWeex°æ±¾ÖУ¬»á½¥½¥·ÏÆúÕâÀàÔ¤¶¨ÒåµÄAPI£¬¶ø¸ÄÓøü¼ÓͨÓõķ½Ê½£º

var stream = require('@weex-module/stream')
module.exports = {
ready: function() {
if (stream && stream.sendMtop) {
stream.sendMtop(params, callback)
} else {
console.error('stream.sendMtop is invalid')
}
}
}

ÕâÀïÓÖÔÙ´ÎÇë³öÁËÍòÄܵÄrequire£¬²»¹ýºÍÆÕͨµÄrequire²»Í¬µÄÊÇ£¬ÐèÒªÖ¸¶¨Ìض¨µÄ@weex-moduleǰ׺·½ÄÜÕýȷʹÓá£

É÷Óûò²»ÓÃÒì²½º¯Êý

ΪÁ˽âÊÍÒì²½º¯ÊýµÄÔÚWeexÖеÄΣº¦£¬Ê×ÏÈÒªÀí½âÔÚWeexÖвúÉúµÄÁ½Ààtask¡£Ò»À࣬ÊÇÓÉWeex¿ØÖƵÄjsºÍnative½»»¥Ê±²úÉúµÄtask£¨ÒÔϼò³ÆWeexµÄtask£©£¬±ÈÈçһϵÁÐÒì²½µ÷ÓÃnativeÄ£¿é·½·¨£¬»òÕßµã»÷ʼþµÈ¡£Ò»À࣬ÊÇϵͳԭÉúµÄtask£¨ÒÔϼò³ÆÔ­ÉúµÄtask£©£¬±ÈÈçsetTimeout£¬Promise¡£ÔÚWeexµÄtaskÖиüÐÂÊý¾Ýʱ£¬Weex¿ÉÒÔ×Ô¶¯¸üÐÂView¡£¶øÔÚÔ­ÉúµÄtaskÖУ¬ÒòΪWeexɥʧÁË¿ØÖÆÈ¨£¬ËùÒÔÎÞ·¨×öµ½×Ô¶¯¸üС£Õâ¾Íµ¼Ö£¬ÔÚÔ­ÉúµÄtaskÖвúÉúµÄdiff£¬»áÖÍÁôÖ±µ½ÏÂÒ»´ÎWeexµÄtask²Å»á±»´¥·¢¸üÐÂView¡£´Ó±íÃæÉÏ¿´£¬¾ÍÊÇÔÚÕâЩԭÉúµÄtaskÖиıäÊý¾Ýºó£¬²¢Ã»Óм°Ê±·´Ó¦µ½ViewÉÏ¡£ÎªÁË£¬±ÜÃâÕâ¸öÎÊÌâµÄ²úÉú£¬Ä¿Ç°À´Ëµ²¢²»ÍƼöʹÓÃPromise¡£¶ø¶ÔÓÚsetTimeoutÀ´Ëµ£¬¿ÉÒÔʹÓÃnativeÌṩµÄtimer.setTimeoutµÄÄ£¿é·½·¨¡£

ÉúÃüÖÜÆÚµÄÒ»¶þÈý

Weexµ±Ç°°æ±¾Éè¼ÆÁË×é¼þµÄÉúÃüÖÜÆÚ£¬ÒÔϵÄÒ»ÕÅͼ¿ÉÒԱȽÏÖ±¹ÛµÄ¸æËß´ó¼ÒÔÚÕû¸öÉúÃüÖÜÆÚÀï¶¼×öÁËЩʲôÊÂÇ飺

ÄÇôÔÚÕâЩÉúÃüÖÜÆÚµÄHookÀ¿ÉÒÔ×öÄÄЩÊÂÇéÄØ£º

ÔÚinitÖпÉÒÔ½øÐÐÊý¾ÝÇëÇ󣬱ÈÈçmtop¡£µ«Õâ¸öʱºòÉÏÏÂÎÄÖл¹Ã»ÓÐdata¶ÔÏó£¬Í¬Ê±Ò²²»½¨ÒéÔÚÖ®ºóµÄÈκν׶θıädataµÄÊý¾Ý½á¹¹¡£

ÔÚcreatedÖУ¬¿ÉÒÔ¶Ôdata½øÐвÙ×÷ÁË£¬ÇÒ´Ëʱ¸üÐÂÊý¾Ý²»»á²úÉú¶àÓàµÄdiff£¬µ«ÇмÉÒ²²»Äܸü¸ÄdataµÄÊý¾Ý½á¹¹¡£ÁíÍ⣬¿ÉÒÔͨ¹ýthis.$onÀ´¼àÌý×Ó×é¼þµÄdispatch¡£

ÔÚreadyÖУ¬´Ëʱ×Ó×é¼þÒѾ­ready£¬¿ÉÒÔ»ñÈ¡×Ó×é¼þµÄVm¶ÔÏóÁË¡£¶ø´Ëʱ£¬Èç¹û¸üÐÂÊý¾Ý£¬»á²úÉú¶àÓàµÄdiff¡£

ÌØ±ðÌáÐÑ£ºÕâÈý¸ö½×¶Î£¬¶¼ÊDz»ÔÊÐí¸ü¸ÄdataµÄÊý¾Ý½á¹¹µÄ¡£

[Bug]ÉèÖÃÑùʽµÄĬÈÏÖµ

À´¿´Ò»¸öͨ¹ý¸Ä±äclassÀ´¸Ä±äÑùʽµÄÀý×Ó£º

<template>
<div>
<text class="{{className}}" onclick="toggle">Hello Weex</text>
</div>
</template>

<style>
.normal {
font-size: 40px;
}

.hightlight {
font-size: 40px;
color: red;
}
</style>

<script>
module.exports = {
data: {
className: 'normal'
},
methods: {
toggle: function() {
if (this.className === 'normal') {
this.className = 'hightlight'
} else {
this.className = 'normal'
}
}
}
}
</script>

ÉÏÊöÀý×Ó£¬Í¨¹ýµã»÷À´Çл»ÑùʽÃû¡£µ«ÊÇÄã»á¾ªÆæµÄ·¢ÏÖ£¬ÔÚ×î³õÒ»´ÎÇл»Ö®ºó£¬×ÖÌåµÄÑÕÉ«¾ÍÒ»Ö±ÊǺìÉ«µÄÁË¡£

ÕâÆäʵÊÇĿǰWeexÒ»¸öbug£¬ÌÖÂÛÈçºÎÐÞ¸´µÄissueÔÚÕâÀï#397¡£Ô­Òò¾ÍÊÇ£¬ÔÚWeexÖÐÑùʽ±íÑùʽµÄÇл»£¬²¢²»»áÇå³ýÔ­À´µÄÑùʽ¡£ÀýÈ磬µ±Ç°ÑùʽÊÇhighlight£¬ÆäÖÐ×ÖÌåÑÕÉ«ÊÇred£¬ÔÚÇл»µ½normalʱ£¬ÒòΪûÓÐÖ¸¶¨×ÖÌåÑÕÉ«£¬½á¹ûÔ­À´µÄredÑÕÉ«¾Í±»±£ÁôÁËÏÂÀ´¶ø²¢Ã»ÓÐÇå³ýµô¡£ËùÒÔ£¬ÔÚÉÏÃæµÄÀý×ÓÖÐΪÁ˱ܿªÕâ¸öbug£¬ÐèÒªÏÔʾµÄÉèÖÃ×ÖÌåÑÕÉ«£º

.normal {
font-size: 40px;
color: black;
}

ÁíÍ⣬¶ÔÓÚ×î¼Ñʵ¼ùÀ´Ëµ£¬¿ÉÒÔͨ¹ý×éºÏclassÃû³ÆµÄ·½Ê½£¬°ÑÐèÒªÇл»µÄÑùʽÌáÈ¡³öÀ´£º

<template>
<div>
<text class="common {{className}}" onclick="toggle">Hello Weex</text>
</div>
</template>

<style>
.common {
font-size: 40px;
}

.normal {
color: black;
}

.hightlight {
color: red;
}
</style>

ÔªËØÉϵÄÊôÐÔ¶¨Òå

WeexÓµÓÐÒ»Ì×ÀàËÆÇ°¶Ë¿ª·¢Ï°¹ßµÄDSL£¬HTMLºÍCSS²¿·ÖÒ²¶¼»á×ñÑ­W3CµÄ±ê×¼¡£ÆäÖÐÔªËØÉϵÄÊôÐÔ¶¨Ò壬¶ÔÓÚ·Çǰ¶ËͬѧÀ´Ëµ»áÓкܶàÎóÇø£¬ÕâÀïÎñ±ØÒªËµÃ÷Ï¡£

ÊôÐÔÃû±ØÐëÈ«²¿Ð¡Ð´£¬¿ÉÒÔʹÓÃÁ¬½Ó·û-¡£

ÊôÐÔÖµ£¬¾¡Á¿±£Ö¤ÊÇԭʼÀàÐÍ£¬¼´number/string/boolean/undefined/null¡£¶ÔÏóÀàÐ͵ÄÖµÒ»°ãÓÃÓÚ´óÊý¾ÝÁ¿µÄÊý¾Ý°ó¶¨¡£

һЩHTMLÎÄÕÂÀï»áÍÆ¼öÔÚÊôÐÔÉÏÓÃdata-xxxµÄ·½Ê½£¬ÕâÀï²¢²»ÐèÒªÌØÒâ¼Ódataǰ׺£¬ÒòΪWeexµÄjsÖв¢Ã»ÓÐdatasetµÄAPI¿É¹©µ÷Óá£

¸ã¶¨×Ó×é¼þµÄÊý¾Ý°ó¶¨

³ÃÈÈ´òÌú£¬À´ËµÏÂ×Ó×é¼þµÄÊý¾Ý°ó¶¨¡£ÒòΪÊý¾Ý°ó¶¨Ò²ÊÇͨ¹ýÊôÐÔÀ´¶¨ÒåµÄ£¬ËùÒÔÊ×ÏÈÒª×ñÑ­ÉÏÒ»¶ÎËù˵µÄ¹æÔò¡£

°ó¶¨Êý¾Ýͨ¹ýÊôÐÔÀ´¶¨Ò壬²»½öÐèÒªÔÚʹÓõÄÔªËØÉÏÖ¸¶¨ÊôÐÔ²¢°ó¶¨¸¸×é¼þÖеÄÊý¾Ý£¬Ò²ÒªÔÚ×Ó×é¼þµÄdataÖÐÖ¸¶¨¶ÔÓ¦µÄ¼ü£¬²¢ÇÒÔªËØÉϵÄÊôÐÔºÍ×Ó×é¼þÖеļüÃûµÄ¶ÔÓ¦¹æÔòÊÇ£ºÈç¹ûÊôÐÔÖÐÓÐÁ¬½Ó·û£¬Ôò¼üÃûΪȥµôÁ¬½Ó·ûºóµÄÍÕ·åд·¨£¬·ñÔòÈ«²¿ÒÔСдÃüÃû¡£

Èç¹û½ö½öÐèÒª¸ø×Ó×é¼þ´«µÝÊý¾Ý£¬¶øÆäÖеÄÊý¾Ý½á¹¹¶Ô¸¸×é¼þÊÇ͸Ã÷µÄ£¬ÄÇô½¨ÒéÖ±½ÓʹÓÃÒ»¸öÊôÐÔÀ´Ó³É䣻Èç¹û£¬ÊôÐÔÊÇ×Ó×é¼þµÄһЩ¹¦ÄÜ£¨ÇÒÊýÁ¿Ð¡ÓÚµÈÓÚ5¸ö£©£¬Ôò¿ÉÒÔ¶ÀÁ¢¿ªÀ´£¨»ù±¾ÉϺÍAPIÐÐΪµÄÉè¼ÆÔ­Ôò²î²»¶à£©£¬ÀýÈ磺

<we-element name="sub1">
<template>
<div><text>sub1</text></div>
</template>

<script>
module.exports = {
data: {
aMtopData: {}
}
}
</script>
</we-element>

<we-element name="sub2">
<template>
<div><text>sub2</text></div>
</template>

<script>
module.exports = {
data: {
option1: '',
option2: ''
}
}
</script>
</we-element>

<template>
<div>
<sub1 a-mtop-data="{{mtopdata}}"></sub1>
<sub2 option1="{{options.op1}}" options2="{{options.op2}}"></sub2>
</div>
</template>

<script>
module.exports = {
data: {
options: {
op1: 'op1',
op2: 'op2'
},
mtopdata: {}
},
created: function() {
var self = this
this.$sendMtop({...}, function(r) {
self.mtopdata = r.data
})
}
}
</script>

±éÀú³¤Áбí

ÔÚÎÒÃǸ÷Àà´óÐÍÔËÓª»î¶¯µÄÒ³ÃæÖУ¬´ó¼Ò¶ÔÂ¥²ã/¿ÓλÕâЩ´ÊÓ¦¸Ã²»Ä°Éú¡£¶øÕâЩÃû´ÊµÄ½çÃæ£¬»ù±¾¶¼Òª¿¿Ñ­»·ÁбíÀ´Íê³É¡£¶øÑ­»·ÁбíµÄÐÔÄÜÓÖÊÇÕû¸öÔËÓªÒ³ÃæµÄ¹Ø¼ü¡£ËùÒÔÔÚ±éÀúÕâÑùµÄÁбí»òÕßÊý×éµÄʱºò£¬¾ÍÐèҪһЩ¼¼ÇÉ¡£

ͨ³£À´Ëµ£¬ÒòΪ´æÔÚÂ¥²ãµÄ¸ÅÄ¶øÂ¥²ãÀïÓÖÊǶà¸ö¿Ó룬¿ÓλÓÖ¾­³£ÊÇË«Áᦱ´£¬ÑÛ³ò×ÅÕâµÃÓøöÈýÖØÑ­»·²ÅÄܸ㶨¡£²»¹ýʵ¼ÊÉÏ£¬Ë«Áᦱ´¿ÉÒÔÓÅ»¯³É²»Ê¹ÓÃÑ­»·µÄ½á¹¹¡£µ±È»ÁË£¬Ç°¶ËµÄͯѥÃÇÒ»¶¨Òª¶Ô×ÅÄãÃǵķþÎñ¶Ëͯѥ±£³Ö¼á¶¨Á¢³¡£¬ÒªÇó»ñµÃÇåÎúÇÒÕýÈ·µÄÊý¾Ý½á¹¹£¬È·±£Ç°¶Ë²»ÐèÒª¶ÔÊý¾Ý½á¹¹×ö¶þ´Î´¦Àí¡£

ͨ³£µÄÊý¾Ý½á¹¹ºÍ¶ÔÓ¦µÄÄ£°åÒ»°ãÊÇÕâÑùµÄ£º

<template>
<div onclick="update">
<div class="tabheader">
<div repeat="{{headers}}" track-by="name" append="tree">
<text>{{name}}</text>
</div>
</div>
<div class="floor" repeat="{{floor in floors}}" track-by="floorId">
<div class="items" repeat="{{items in floor.items}}" track-by="lineId" append="tree">
<text>{{items.list[0].name}}</text>
<text>{{items.list[1].name}}</text>
</div>
</div>
</div>
</template>

<style>
.tabheader {
flex-direction: row;
}
.items {
flex-direction: row;
}
</style>

<script>
module.exports = {
data: {
floors: [
{
floorId: 1,
name: 'f1',
items:[
{lineId: 1, list: [{itemId:1, name: 'i1'}, {itemId:2, name: 'i2'}]},
{lineId: 2, list: [{itemId:3, name: 'i3'}, {itemId:4, name: 'i4'}]}
]
}
]
},
computed: {
headers: function() {
return this.floors.map(function(v) {
return {name: v.name}
})
}
},
methods: {
update: function() {
this.floors[0].items.push(
{lineId: 3, list: [{itemId:5, name: 'i5'}, {itemId:6, name: 'i6'}]},
{lineId: 4, list: [{itemId:7, name: 'i7'}, {itemId:8, name: 'i8'}]}
)
this.floors.push({
floorId: 2,
name: 'f2',
items: [
{lineId: 5, list: [{itemId:9, name: 'i9'}, {itemId:10, name: 'i10'}]},
{lineId: 6, list: [{itemId:11, name: 'i11'}, {itemId:12, name: 'i12'}]}
]
})
}
}
}
</script>

ÆäÖбȽϳ£¼ûµÄÊý¾Ý½á¹¹ÎÊÌ⣬±ÈÈçitemsÖ»ÊÇÒ»¸öһάÊý×é¡£Èç¹ûÄÜÔÚ·þÎñ¶Ë¾Í´¦ÀíºÃitemsµÄ¶àάÊý×éÎÊÌ⣬ÄÇôǰ¶ËµÄЧÂÊ»á¸ßºÜ¶à¡£

ÔÙ×ÐϸÆÊÎöÆäÖеÄÄ£°å£º

<div class="tabheader" repeat="{{headers}}">

...

computed: {
headers: function() {
return this.floors.map(function(v) {
return {name: v.name}
})
}
}

ÕâÀï°ó¶¨ÁËÒ»¸öcomputedÌØÐÔµÄÊý¾Ý¡£µ±Ä³ÀàÊý¾Ý²»Ì«ÊʺÏչʾµÄʱºò£¬ÍƼö¿ÉÒÔÓÃcomputedµÄ·½Ê½À´´ïµ½Êý¾ÝÔ¤´¦ÀíµÄÄ¿µÄ£¬¶ø²»ÊÇÔÚcreatedÖпÔßê¿ÔßêµÄËãÒ»·ÝеÄÊý¾Ý½á¹¹³öÀ´¡£

...
<div repeat="{{headers}}" track-by="name" append="tree">
...

<div class="floor" repeat="{{floor in floors}}" track-by="floorId">
<div class="items" repeat="{{items in floor.items}}" track-by="lineId">

ÔÚÕâÈý¸örepeatÖж¼ÓÃÁËtrack-by¡£ËüµÄÌØµãÊÇ£¬¿ÉÒԼǼÊý×éÖÐij¸öÏîµÄÒ»¸öÖ÷¼ü£¬²¢ÔÚÖ®ºóµÄ¸üÐÂÖи´ÓÃÕâ¸öÌØ¶¨µÄÏ¶ø²»ÊÇÖØ¹¹Õû¸öÊý×é¡£ÀýÈç

Â¥²ã1Ôö¼ÓÁ½ÐпÓλ

this.floors[0].items.push(
{lineId: 3, list: [{itemId:5, name: 'i5'}, {itemId:6, name: 'i6'}]},
{lineId: 4, list: [{itemId:7, name: 'i7'}, {itemId:8, name: 'i8'}]}
)

Ôö¼ÓÒ»¸öÂ¥²ã

this.floors.push({
floorId: 2,
name: 'f2',
items: [
{lineId: 5, list: [{itemId:9, name: 'i9'}, {itemId:10, name: 'i10'}]},
{lineId: 6, list: [{itemId:11, name: 'i11'}, {itemId:12, name: 'i12'}]}
]
})

Èç¹ûûÓÐÉèÖÃtrack-by£¬ÄÇôWeex»áÖØ¹¹Õû¸öÊý×飬µ¼ÖÂÔªËØ±»É¾³ýºóÓÖÖØÐÂÌí¼Ó¡£¶øÌí¼ÓÁËid×÷Ϊtrack-byµÄÖ÷¼üºó£¬idÏàͬµÄÔªËØ»áͨ¹ýÒÆ¶¯µÄ·½Ê½À´ÓÅ»¯²Ù×÷¡£

ÓÅ»¯³¤Áбí

³¤ÁбíÏàÐÅ´ó¼Ò¶¼×ö¹ý¡£WeexÖУ¬¶ÔÁбíµÄÓÅ»¯ÒѾ­·Ç³£½Ó½üÔ­ÉúϵͳµÄÁбíÁË£¬Õâ¸öÒª¹é¹¦ÓÚÎÒÃǵÄNativeÍŶӡ£µ«¼´Ê¹ÓÐÁËÐÔÄܲ»´íµÄÁÐ±í£¬¶ÔÓÚÊׯÁµÄäÖȾ»¹ÊÇÓÐ×·ÇóµÄ¡£

ÔÚWeexÖУ¬Òª×öÎÞ¾¡ÁбíÆäʵ·Ç³£¼òµ¥£¬ÒòΪÔÚlistºÍscrollµÄÔªËØÉÏ£¬ÒѾ­ÊµÏÖÁËonloadmoreʼþ£¬Õâ¸öʼþ»áÔÚ¹ö¶¯´¥µ×£¨»òÕßÀëµ×²¿Ò»¶¨µÄ¾àÀ룩ʱ´¥·¢£¬ËùÒÔÕâÑù¿´ÆðÀ´£¬×öÎÞ¾¡Áбí±äµÃ·Ç³£ÈÝÒס£²»¹ý£¬ÕâÑùµÄÎÞ¾¡ÁбíÌåÑé¾ø¶ÔËã²»Éϼ«Ö¡£Õâ¸öʱºò£¬¿ÉÒÔ½èÖúloadingÕâ¸ö×é¼þ£¬²¢ÅäºÏonloadingʼþ£¬À´Õ¹ÏÖ¸ü¼Ó³öÉ«µÄÎÞ¾¡ÁÐ±í¡£

<template>
<list>
<cell repeat="{{v in items}}" track-by="id">
<text>{{v.name}}</text>
</cell>
<loading class="loading" onLoading="loadingHandler">
<text>{{loadingText}}</text>
</loading>
</list>
</template>

<script>
module.exports = {
data: {
index: 0,
size: 50,
count: 10,
loadingText: '¼ÓÔØ¸ü¶à...',
items: []
},
created: function() {
this.addPage()
},
methods: {
addPage: function() {
for (var i = 0; i < this.size; i++) {
var id = this.index * this.size + i
this.items.push({id: id, name: 'item-' + id})
}
this.index++
},
loadingHandler: function() {
if (this.index === this.count) {
this.loadingText = 'ûÓиü¶àÁË'
} else {
this.addPage()
}
}
}
}
</script>

Éè¼ÆÓÅÐãµÄWeex×é¼þ

ÔÚWeexÔ­Éú¹¦ÄÜÔ½À´Ô½·á¸»µÄǰÌáÏ£¬¿ª·¢Õß¿ÉÒÔÉè¼Æ³ö¸÷Àà·ûºÏÒµÎñÐèÇóµÄUI×é¼þ£¬ÕâЩUI×é¼þ»ù±¾¿ÉÒÔ×ñÑ­±ê×¼µÄÄ£¿é»¯¿ª·¢£¬ÒÑ´ïµ½¸´Óú͸߶ȶ¨ÖƵÄÄ¿µÄ¡£

ÓýÅÊÖ¼ÜÀ´³õʼ»¯Weex×é¼þµÄ²Ö¿âÔÙºÏÊʲ»¹ýÁË¡£

WeexÊÇÒ»ÖÖÊý¾ÝÇý¶¯µÄÉè¼Æ¿ò¼Ü£¬×é¼þ²¢²»ÊÇͨ¹ýAPIÀ´±©Â¶ÐÐΪ£¬¶øÊÇͨ¹ýÊý¾Ý°ó¶¨À´¸ø×é¼þÉèÖÃÐÐΪ¡£

×é¼þµÄͨÐÅ£¬¿ÉÒÔͨ¹ý$dispath/$broadcastÀ´Íê³É£¬²»¹ýÕâµÃ¸¶³öÒ»µãµãÐÔÄܵĴú¼Û¡£¶øÔÚ¸¸×é¼þÄõ½Ö±½Ó×Ó×é¼þµÄ¶ÔÏóºó£¬Æäʵ¿ÉÒÔͨ¹ý$on/$emitÀ´¼õÉÙÐÔÄܵĿªÏú¡£

Èç¹û×é¼þÐèÒª¸ß¶È¶¨ÖÆUI£¬¿ÉÒÔ¿¼ÂÇʹÓÃcontent/slot±êÇ©£¬¾ßÌå¿ÉÒԲο¼ÏÂwxc-marquee¡£

½èÓɽÅÊּܳõʼ»¯Weex×é¼þ¹¤³Ì£¬¿ÉÒÔÇáËÉ·¢²¼µ½npm/tnpm£¬²¢ÇÒ¿ª·¢ÕßÔÚͨ¹ýnpm install°²×°ºó£¬¿ÉÒÔÇáËɵÄÒÔrequire·½Ê½À´ÒýÈëÕâЩ×é¼þ¡£

µ÷ÊÔ´úÂ루²é¿´ÈÕÖ¾£©

WeexδÀ´»á½ÓÈëChrome Dev-tools£¬ÉõÖÁDebugger for IDE£¬ÕâЩ¶¼¿ÉÒÔССÆÚ´ýϵġ£¶øµ±Ï¿ÉÒÔͨ¹ýÊä³öÈÕÖ¾µÄԭʼ·½Ê½À´µ÷ÊÔ¡£

ÔÚ×ʼµÄÀûÆ÷Ò»ÕÂÖУ¬ÎÒÒѾ­Èôó¼Ò°²×°ÁËweex-toolkit£¬²¢ÓµÓÐÁËweexÃüÁî¡£ÄÇôÏÖÔÚÒªÓÃËüÀ´¿ªÆôµ÷ÊԵĴóÃÅ£º

weex --debugger

»òÕßÔÚ½ÅÊּܹ¤³ÌÖÐÔËÐУº

npm run debugger

Õâ¸öʱºò»áÊä³öÒ»¶Î±¾µØµÄipµØÖ·£¬ÔÚä¯ÀÀÆ÷ÀïÊäÈëÕâ¸öµØÖ·£¬»áչʾһ¸ö¶þάÂë¡£ÓÃÊÖÌÔdebug°ü»òPlaygroundɨÂëÖ®ºó£¬¾Í¿ªÆôÁËÊä³öÈÕ־ģʽ¡£

ÔÚÕâ¸ö½çÃæÖУ¬Äã¿ÉÒÔͨ¹ýÑ¡ÔñÉ豸µÄÈÕÖ¾¼¶±ð£¬ÒÔ¼°Õ¹Ê¾µÄÊä³ö¼¶±ðÀ´ÕÒµ½ÄãÏëÒªµÄÈÕÖ¾¡£Í¬Ê±ÔÚ´úÂëÖУ¬¿ÉÒÔͨ¹ýconsole.log/debug/info/warn/debugÀ´Êä³öÏàÓ¦¼¶±ðµÄÈÕÖ¾¡£

ÔÚÈÕÖ¾debug¼¶±ðÖУ¬ÒÔ[js framework]¿ªÍ·µÄ£¬±ãÊÇjs-frameworkµÄ½âÎö²Ù×÷¡£ÔÚÈÕÖ¾verbose¼¶±ðÖУ¬ÒÔCalling JSºÍCalling Native¿ªÍ·µÄ£¬¾ÍÊÇjsºÍnative»¥ÏàͨÐŵIJÙ×÷¡£

Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì

   
3786 ´Îä¯ÀÀ       27