±à¼ÍƼö: |
±¾ÎÄÀ´×Ô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ÃüÁî´´½¨Ò»¸öʾÀýÎļþ£º
È»ºóËæ±ã±à¼µãʲô£¬±ÈÈ磺
<template>
<div class="wxc-hellworld">
<text>Hello Weex</text> </div>
</template> |
½ô½Ó×Å£¬ÔÙÔËÐÐÄǸöÉñÆæµÄÃüÁ
Ã͵ػá³öÏÖÒ»¸ö˶´óµÄ¶þάÂë£¬Ãæ¶ÔÕâ¸ö¶þάÂë¿ÉǧÍò²»ÒªãÂȦ£¬ÇëºÍÎÒÒ»ÆðÏÂÔØÁíÒ»¸öÉñÆ÷Weex Playground¡£
µ±ÓÃÕâ¸öÉñÆæµÄɨÂ빦ÄÜɨÃèÕâ¸ö¶þάÂ룬¾ÍÄÜչʾHello WeexµÄ½çÃæ¡£²¢ÇÒ£¬Õâ¸ö¶þάÂëÖ§³ÖLive
Reload¡£ÈκζÔhelloworld.weµÄ¸Ä¶¯¶¼»áÁ¢¼´¸üÐÂPlaygroundÀïËùչʾµÄ½çÃæ¡£
´î½¨ÍêÕû¹¤³Ì
²»¹ý£¬¶ÔÓÚÎÒÃÇÕâЩ¿à±ÆµÄǰ¶Ë¹¥³ÇʦÀ´Ëµ£¬ÏÖÔÚÈκÎÒ»¸ö»î¶¯¶¼Ã»·¨ÓÃÒ»¸ö¼òµ¥Ò³ÃæÀ´¸ã¶¨ÁË£¬¸ü²»ÓÃ˵¸´ÔӵIJúÆ·¡£ËùÒÔ£¬Ò»¸ö´ó¶øÃÀµÄ¹¤³Ì²ÅÄÜÌî²¹ÐÄÖеÄÒõÓ°¡£
Èç¹ûÄãÊÇһλ°ßÂíÆ½Ì¨µÄ´ØÓµÕߣ¬½¨ÒéÄãÖ±½Ó·ÃÎʰßÂíÆ½Ì¨µÄ°ïÖúÎĵµÀ´Íê³ÉÕâ¼þÊÂÇ飺Weex for Zebra¡£
¶ø½ÓÏÂÀ´£¬ÎÒÏëÒªÏêϸ²ûÊöµÄÊDz»ÒÀÀµÌض¨Æ½Ì¨µÄWeex¹¤³Ì´î½¨¡£
½ÅÊÖ¼Ü
Adam£¬Ñǵ±£¬Ò»ÇÐÖ®Ô´¡£ÓÃÁËËü£¬ÔÙÒ²²»Óõ£ÐĵÚÒ»´ÎµÄÞÏÞÎÁË¡£
ºÃÁË£¬Ó²¹ãʱ¼ä½áÊø¡£Èç¹ûÒª´î½¨¹¤³Ì£¬½ÅÊÖ¼ÜÊDz»¿É»ñÈ¡µÄ¡£ÕâÀïÍÆ¼öÒ»¸ö½Ð×öadamµÄ½ÅÊּܹ¤¾ß£¬²»½ö¼òµ¥Ò×Ó㬻¹ÄÜÇáËɵĴ´½¨Äã×Ô¼ºÏëÒªµÄ½ÅÊּܡ£Ê×ÏÈ£¬Í¨¹ýtnpm°²×°¡£
È»ºó£¬Ìí¼ÓWeexµÄ½ÅÊּܣº
½ô½Ó×Å£¬ÔÚij¸ö¿ÕĿ¼Ï£¬ÔËÐÐadam£¬²¢¸ù¾ÝÌáʾÍê³É³õʼ»¯¡£
½Å±¾
Õâ¸ö½ÅÊּܹ¤³ÌÖаüº¬ÁË»ù±¾µÄ¿ª·¢ÃüÁͨ¹ýnpm i°²×°ÍêÒÀÀµºó£¬¾Í¿ÉÒÔÓÃÕâЩ½Å±¾À´½øÐпª·¢ÁË£º
ת»»srcĿ¼ÏµÄËùÓÐ.weÎļþ£¬²¢Êä³öµ½distĿ¼ÏÂ
¼àÌý.weÎļþµÄ¸Ä¶¯£¬²¢¸üÐÂdistĿ¼ÏµÄÏàÓ¦Îļþ
Ô¤ÀÀH5°æÒ³Ãæ
ÔÚä¯ÀÀÆ÷Öдò¿ª£ºhttp://localhost:3000/index.html?page=dist/welcome.js
Éú³É¹©PlaygorundɨÃèµÄ¶þάÂë
npm run qr --
src/welcome.we |
Æô¶¯µ÷ÊÔ¹¤¾ß£¨ÏÂÃæÓÐÕ½ھßÌåÁÄÕâ¸öÊ£©
ÓÐÁËÉÏÊöÕâô¶àÀûÆ÷£¬¿ª·¢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ÃüÁî¡£ÄÇôÏÖÔÚÒªÓÃËüÀ´¿ªÆôµ÷ÊԵĴóÃÅ£º
»òÕßÔÚ½ÅÊּܹ¤³ÌÖÐÔËÐУº
Õâ¸öʱºò»áÊä³öÒ»¶Î±¾µØµÄipµØÖ·£¬ÔÚä¯ÀÀÆ÷ÀïÊäÈëÕâ¸öµØÖ·£¬»áչʾһ¸ö¶þάÂë¡£ÓÃÊÖÌÔdebug°ü»òPlaygroundɨÂëÖ®ºó£¬¾Í¿ªÆôÁËÊä³öÈÕ־ģʽ¡£

ÔÚÕâ¸ö½çÃæÖУ¬Äã¿ÉÒÔͨ¹ýÑ¡ÔñÉ豸µÄÈÕÖ¾¼¶±ð£¬ÒÔ¼°Õ¹Ê¾µÄÊä³ö¼¶±ðÀ´ÕÒµ½ÄãÏëÒªµÄÈÕÖ¾¡£Í¬Ê±ÔÚ´úÂëÖУ¬¿ÉÒÔͨ¹ýconsole.log/debug/info/warn/debugÀ´Êä³öÏàÓ¦¼¶±ðµÄÈÕÖ¾¡£
ÔÚÈÕÖ¾debug¼¶±ðÖУ¬ÒÔ[js framework]¿ªÍ·µÄ£¬±ãÊÇjs-frameworkµÄ½âÎö²Ù×÷¡£ÔÚÈÕÖ¾verbose¼¶±ðÖУ¬ÒÔCalling
JSºÍCalling Native¿ªÍ·µÄ£¬¾ÍÊÇjsºÍnative»¥ÏàͨÐŵIJÙ×÷¡£
|