<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>cheng19840218 (司徒正美)</title>
    <link>https://ruby-china.org/cheng19840218</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>迷你 MVVM 框架 avalonjs 1.3.8 发布</title>
      <description>&lt;p&gt;avalon1.3.8 主要是在 ms-repeat、ms-each、ms-with 等循环绑定上做重大性能优化，其次是对一些绑定了事件的指令添加了 roolback，让其 CG 回收更顺畅。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  重构 ms-repeat、ms-each、ms-with,  内部的代理对象全部使用普通的对象实现，并且一个监控数组只对应一个代理 VM 数组，从而大量减少 VM 的数量。&lt;/li&gt;
&lt;li&gt;  avalon 不再使用 scanCallback 实现内部各种 rendred 回调，改成 checkScan 方法。&lt;a href="https://github.com/RubyLouvre/avalon/blob/master/examples/duplex7.html" rel="nofollow" target="_blank" title=""&gt;详看这里的例子&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;  fix parseHTML 在旧式 IE 下动态生成 tr 元素，多添加了 caption 元素的 BUG&lt;/li&gt;
&lt;li&gt;  getEachProxy 方法在 ms-repeat, ms-duplex 混合使用时，清空数组，某一部分元素无法同步的 BUG&lt;/li&gt;
&lt;li&gt;  fix IE6-9 下 addClass 没有对类名进行 trim 操作的 BUG&lt;/li&gt;
&lt;li&gt;  fix 短路与，短路或引发的收集依赖失败的 BUG&lt;/li&gt;
&lt;li&gt;  重构 scanAttr, fix ms-repeat 与 ms-css, ms-data 共存而漏扫的问题&lt;/li&gt;
&lt;li&gt;  avalon.modern.js 去掉 HTML Imports 的实现，收拾大写变小写引发的 BUG&lt;/li&gt;
&lt;li&gt;  fix date filter BUG&lt;/li&gt;
&lt;li&gt;  fix 内部 onTree BUG，可能会引起死循环，详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/4f8aaa372fbcb068ba4de3689e145eccdfa6b488" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  fix html filter，详见 &lt;a href="https://github.com/RubyLouvre/avalon/commit/fcf6ed1da47148445dfb977ac627d9434a08f687" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  优化 CG 回收 ms-if ms-hover ms-active 都加上 rollback 方便移除绑定&lt;/li&gt;
&lt;li&gt;  onTree 在触发里面的事件时，针对 change blur 事件需要对 document.activeElement 进行检测&lt;/li&gt;
&lt;li&gt;  修正 ms-class 中的占位符的生成方式&lt;/li&gt;
&lt;li&gt;  修正 avalon.fn.data 取某些对象属性时被序列化的 BUG&lt;/li&gt;
&lt;li&gt;  修正 IE6-8 下 ms-css-float BUG&lt;/li&gt;
&lt;li&gt;  优化 计算属性，它再也不用收集视图刷新函数与更新视图了&lt;/li&gt;
&lt;li&gt;  ms-repeat、ms-each、ms-with 现在完全按照供销渠道那一套来写了，所有代理 VM 的产生、消费、回收，存放通过 xxxProxyFactory、xxxProxyAgent、recycleProxies、xxxProxyPool 实现。详见&lt;a href="https://github.com/RubyLouvre/avalon/blob/294c547c035c1268e3ffdce32fbbe76e8cef9f26/src/15%20directive/repeat.js" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;此外，avalon 已经使用&lt;a href="http://avalonjs.github.io" rel="nofollow" target="_blank" title=""&gt;新官网&lt;/a&gt;，原《入门教程》也使用新风格重写，大家有必要重看一下《入门教程》。&lt;/p&gt;

&lt;p&gt;迷你 MVVM 框架在 github 的仓库&lt;a href="https://github.com/RubyLouvre/avalon" rel="nofollow" target="_blank" title=""&gt;https://github.com/RubyLouvre/avalon&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;avalon 的新 UI 库地址&lt;a href="http://ued.qunar.com/" rel="nofollow" target="_blank" title=""&gt;OniUI&lt;/a&gt;，多达 42 个 UI，强大的换肤功能&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/495346/o_logos.png" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;朋友们用 avalon 做的东西&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="http://as.baidu.com/a/item?docid=4474290&amp;amp;pre=web_am_se&amp;amp;f=web_alad@next&amp;amp;qq-pf-to=pcqq.group" rel="nofollow" target="_blank" title=""&gt;移动应用：读酷&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://chrome.google.com/webstore/detail/prefix/gjpcbbbopajjjnkbkeaflldnocoppcpc" rel="nofollow" target="_blank" title=""&gt;chrome 插件：饭否客户端&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://note.wiz.cn/login?redirectUrl=https%3A%2F%2Fnote.wiz.cn%2Fweb" rel="nofollow" target="_blank" title=""&gt;为知笔记&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://vip.wps.cn/" rel="nofollow" target="_blank" title=""&gt;金山 WPS office 会员中心&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://www.docer.com/" rel="nofollow" target="_blank" title=""&gt;稻売儿&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://www.sangxiazichan.com/" rel="nofollow" target="_blank" title=""&gt;桑夏资产官网&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://crm5demo.vcb.cn/Account/Login" rel="nofollow" target="_blank" title=""&gt;企业级应用：超博 CRM 客户关系管理系统&lt;/a&gt;(帐号：&lt;strong&gt;crm_ceo&lt;/strong&gt; 密码：&lt;strong&gt;nncb_ceo)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/zhangchunlin/avalon-uliweb-examples" rel="nofollow" target="_blank" title=""&gt;uliweb Python 框架与 avalon 的组合示例&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://github.com/darkbluegood/domain" rel="nofollow" target="_blank" title=""&gt;avalon+jQuery 实现域名注册查询&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://wvovo.com/avalon/" rel="nofollow" target="_blank" title=""&gt;路由器示例&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://acts.qpdiy.com/apps/Voting/index.php" rel="nofollow" target="_blank" title=""&gt;边锋活动页&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://5233.wiisocl.com/" rel="nofollow" target="_blank" title=""&gt;记者考试题&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://qiangtou.github.io/js/2014/05/09/2048/" rel="nofollow" target="_blank" title=""&gt;基于 avalonJS 实现的 2048 游戏&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="http://oarc.mokylin.com:10100/" rel="nofollow" target="_blank" title=""&gt;墨麒 OA (user: linwei, password: 654321)&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;最近，已经有三个百度部门（百度移动，百度商业，百度推广）在用 avalon 了，你们也快快加入吧！&lt;/p&gt;</description>
      <author>cheng19840218</author>
      <pubDate>Fri, 19 Dec 2014 19:29:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/23293</link>
      <guid>https://ruby-china.org/topics/23293</guid>
    </item>
    <item>
      <title>迷你 MVVM 框架 avalonjs 1.3.7 发布</title>
      <description>&lt;p&gt;&lt;a href="https://github.com/RubyLouvre/avalon" rel="nofollow" target="_blank" title=""&gt;avalon&lt;/a&gt;是一款基于 &lt;strong&gt;Object.defineProperty&lt;/strong&gt; 与 &lt;strong&gt;VBScript&lt;/strong&gt; 实现属性监控变动的 MVVM 框架，因此性能比基于脏检测的 angular 来得更好，使用方法也比基于属性转函数的 knockout 来得直接便捷。简单易用易上手兼容性好的是其最大的特点。&lt;/p&gt;

&lt;p&gt;下面是详细介绍：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="https://github.com/RubyLouvre/avalon" rel="nofollow" target="_blank" title=""&gt;avalon&lt;/a&gt;现在有三个分支:avalon.js 兼容 IE6，及标准浏览器;avalon.modern.js 则只支持 IE10 及其以上版本，及标准浏览器，主流山寨浏览器 (QQ, 猎豹，搜狗，360, 傲游) ;avalon.observe 是用于研究 es6 的新特性，使用 Object.observe 实现的；&lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/RubyLouvre/avalon" rel="nofollow" target="_blank" title=""&gt;avalon&lt;/a&gt;拥有强大的组件库，现在由去哪儿网前端架构组在维护与升级，&lt;a href="http://ued.qunar.com/" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;；首先是三柱臣，想使用路由器，可以用&lt;a href="https://github.com/RubyLouvre/mmRouter" rel="nofollow" target="_blank" title=""&gt;mmRouter&lt;/a&gt;，想使用动画，可以用&lt;a href="https://github.com/RubyLouvre/mmAnimate" rel="nofollow" target="_blank" title=""&gt;mmAnimate&lt;/a&gt;，想使用 AJAX，可以用&lt;a href="https://github.com/RubyLouvre/mmRequest" rel="nofollow" target="_blank" title=""&gt;mmRequest&lt;/a&gt;；其是是 OniUI，树组件差不多开发完毕，届时就有一个拥有 2 个 Grid，1 个树，1 个验证插件等总数近 50 个 UI 组件的库了。&lt;/li&gt;
&lt;li&gt;avalon 的测试比较庞大，放在独立的仓库中——&lt;a href="https://github.com/RubyLouvre/avalon.test" rel="nofollow" target="_blank" title=""&gt;avalon.test&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="优势"&gt;优势&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;使用简单，在 HTML 中添加绑定，在 JS 中用 avalon.define 定义 ViewModel，再调用 avalon.scan 方法，它就能动了！&lt;/li&gt;
&lt;li&gt;兼容到 &lt;strong&gt;IE6&lt;/strong&gt; (其他 MVVM 框架，KnockoutJS(IE6), AngularJS(IE9), EmberJS(IE8), WinJS(IE9) )，另有 avalon.mobile，它可以更高效地运行于 IE10 等新版本浏览器中&lt;/li&gt;
&lt;li&gt;没有任何依赖，不到 5000 行，压缩后不到 50KiB&lt;/li&gt;
&lt;li&gt;支持管道符风格的过滤函数，方便格式化输出&lt;/li&gt;
&lt;li&gt;局部刷新的颗粒度已细化到一个文本节点，特性节点&lt;/li&gt;
&lt;li&gt;要操作的节点，在第一次扫描就与视图刷新函数相绑定，并缓存起来，因此没有选择器出场的余地。&lt;/li&gt;
&lt;li&gt;让 DOM 操作的代码近乎绝迹&lt;/li&gt;
&lt;li&gt;使用类似 CSS 的重叠覆盖机制，让各个 ViewModel 分区交替地渲染页面&lt;/li&gt;
&lt;li&gt;节点移除时，智能卸载对应的视图刷新函数，节约内存&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;操作数据即操作 DOM&lt;/strong&gt;，对 ViewModel 的操作都会同步到 View 与 Model 去&lt;/li&gt;
&lt;li&gt;自带 AMD 模块加载器，省得与其他加载器进行整合&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="学习教程"&gt;学习教程&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href="http://www.html-js.com/article/column/234" rel="nofollow" target="_blank" title=""&gt;avalon 学习教程&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://limodou.github.io/avalon-learning/zh_CN/index.html" rel="nofollow" target="_blank" title=""&gt;avalon-learning&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.cnblogs.com/rubylouvre/p/3181291.html" rel="nofollow" target="_blank" title=""&gt;入门教程&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://vdisk.weibo.com/s/aMO9PyIQCnLOF/1375154475" rel="nofollow" target="_blank" title=""&gt;HTML5 交流会有关 avalon 的 PPT&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.cnblogs.com/rubylouvre/p/3385373.html" rel="nofollow" target="_blank" title=""&gt;avalon 最佳实践&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="运行github中的示例"&gt;运行 github 中的示例&lt;/h2&gt;
&lt;p&gt;将项目下载到本地，里面有一个叫 server.exe 的.Net 小型服务器（可以需要安装&lt;a href="http://dl.pconline.com.cn/download/54972.html" rel="nofollow" target="_blank" title=""&gt;.Net4.0&lt;/a&gt;），
点击它然后打开里面与 index 开头的 HTML 文件，一边看运行效果，一边看源码进行学习。
&lt;img src="https://raw.github.com/RubyLouvre/avalon/master/examples/images/example.jpg" title="" alt="Alt text"&gt;&lt;/p&gt;
&lt;h2 id="JS文件的压缩"&gt;JS 文件的压缩&lt;/h2&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;java -jar compiler.jar --js avalon.js --js_output_file avalon.min.js
java -jar compiler.jar --js avalon.modern.js --js_output_file avalon.modern.min.js
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大家也可以在&lt;a href="http://huati.weibo.com/k/avalon%E5%BF%AB%E6%8A%A5?from=501&amp;amp;order=time" rel="nofollow" target="_blank" title=""&gt;新浪微博&lt;/a&gt;第一时间了解它的变更或各种秘笈分享！&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;http-equiv=&lt;/span&gt;&lt;span class="s"&gt;"Content-Type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"text/html; charset=UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"avalon.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
            &lt;span class="nx"&gt;avalon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;define&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                &lt;span class="na"&gt;$id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;word&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello Avalon&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;ms-controller=&lt;/span&gt;&lt;span class="s"&gt;"test"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{word}}!!!!!&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="http://htmljs.b0.upaiyun.com/uploads/1409228882210-text4.jpg" title="" alt="avalon"&gt;&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;avalon入门&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;http-equiv=&lt;/span&gt;&lt;span class="s"&gt;"Content-Type"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"text/html; charset=UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"avalon.js"&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
            &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;avalon&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;test&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;司徒&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;正美&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;fullName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="c1"&gt;//一个包含set或get的对象会被当成PropertyDescriptor，&lt;/span&gt;
                    &lt;span class="na"&gt;set&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="c1"&gt;//里面必须用this指向scope，不能使用scope&lt;/span&gt;
                        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;val&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;aaa&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bbb&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ccc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ddd&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bbb&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ccc&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkAllbool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
                &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkAll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="nx"&gt;first&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;
                        &lt;span class="k"&gt;return&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checked&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selected&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selected&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkOne&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;bool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checked&lt;/span&gt;
                    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkAllbool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;checkAllbool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;selected&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;size&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;vm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arr&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;})&lt;/span&gt;

        &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt; 
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;ms-controller=&lt;/span&gt;&lt;span class="s"&gt;"test"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;First name: &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;ms-duplex=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Last name: &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;ms-duplex=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;  &lt;span class="nt"&gt;/&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Hello,    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;ms-duplex=&lt;/span&gt;&lt;span class="s"&gt;"fullName"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;{{firstName +" | "+ lastName }}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"checkbox"&lt;/span&gt; &lt;span class="na"&gt;ms-duplex-radio=&lt;/span&gt;&lt;span class="s"&gt;"checkAllbool"&lt;/span&gt;  &lt;span class="na"&gt;data-duplex-changed=&lt;/span&gt;&lt;span class="s"&gt;"checkAll"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;全选&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;ms-repeat=&lt;/span&gt;&lt;span class="s"&gt;"arr"&lt;/span&gt; &lt;span class="nt"&gt;&amp;gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"checkbox"&lt;/span&gt; &lt;span class="na"&gt;ms-value=&lt;/span&gt;&lt;span class="s"&gt;"el"&lt;/span&gt; &lt;span class="na"&gt;ms-duplex=&lt;/span&gt;&lt;span class="s"&gt;"selected"&lt;/span&gt; &lt;span class="na"&gt;data-duplex-changed=&lt;/span&gt;&lt;span class="s"&gt;"checkOne"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;{{el}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="http://htmljs.b0.upaiyun.com/uploads/1409205073507-vmodels3.gif" title="" alt="hello"&gt;&lt;/p&gt;

&lt;p&gt;其绑定属性一览，与 angular, knockout 的指令相很近，学过后两者可以很快上手。
&lt;img src="http://htmljs.b0.upaiyun.com/uploads/1409217431401-bindings.png" title="" alt="bindings"&gt;
&lt;img src="http://htmljs.b0.upaiyun.com/uploads/1409221176519-vmodels5.jpg" title="" alt="feature"&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.html-js.com/article/Avalon-tutorial-16-step-by-step-do-a-todoMVC" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;还有 TodoMVC 的 avalon 版本学习。&lt;/p&gt;

&lt;p&gt;下面是 1.3.7 的更新日志：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;【新特征】ms-duplex 绑定全面升级，脱胎换骨，如 avalon.duplexHooks 钩子对象，pipe 内部方法。详看&lt;a href="https://github.com/RubyLouvre/avalon/blob/master/examples/duplex7.html" rel="nofollow" target="_blank" title=""&gt;这里的例子&lt;/a&gt;。&lt;/li&gt;
&lt;li&gt;【新特征】添加 data-include-replace 辅助指令 详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/0be08337a283f0e0d90aee0cee7966aed9abd65f" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;【新特征】data-duplex-changed 支持第二个参数 data 详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/29bb3951044d66291eb90ec1d79d3348dfb34974" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
*【新特征】VM 的$fire 通信机制变成这个样式，all!xxx 是不依赖于 DOM 树向周边 VM 发出通知; up!xxx 与 down!xxx 是依赖于 DOM 向上方或向下方的 VM 发出通知，我们可以 return false 中止广播; 普通的 xxx 只能触发当前的 VM 的$watch 回调。&lt;/li&gt;
&lt;li&gt;【新特征】添加 avalon.scanCallback，允许在某次扫描后触发这些回调。详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/6fe8724e5bf8825f6ee38952fba931b46939875a" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;与&lt;a href="https://github.com/RubyLouvre/avalon/blob/master/examples/class1.html" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;的例子
&lt;code&gt;javascript
avalon.scanCallback = function(fn, group) {
group = group || "$all"
var array = scanObject[group] || (scanObject[group] = [])
array.push(fn)
}
avalon.scan = function(elem, vmodel, group) {
elem = elem || root
group = group || "$all"
//.....略
}
&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt; 【优化】修正 $fire 在跨模块通信时无法通知 widget 组件的 BUG（添加了 createSinalTower 内部方法）&lt;/li&gt;
&lt;li&gt; 【优化】更改 innerRequire 内部方法的位置，及设置为空函数，方便用户移除“AMD 加载器模块”后也能正常使用&lt;/li&gt;
&lt;li&gt; 【优化】精简 IE6-8 下 input 事件的模拟&lt;/li&gt;
&lt;li&gt; 【优化】精简 newSetter 的逻辑 详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/34e57f4f85432962552c0d73d9a590480c699d08" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; 【优化】重构 notifySubscribers&lt;/li&gt;
&lt;li&gt; 【优化】fix getEachProxy BUG 详见&lt;a href="https://github.com/RubyLouvre/avalon/issues/571" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; 【优化】支持生成更多 SVG 元素&lt;/li&gt;
&lt;li&gt; 【优化】为对付 firefox 插件下严格的语法检测，使用全新的获取全局变量 window 的方法&lt;/li&gt;
&lt;li&gt; 【优化】修正 ms-src 不能加载 SWF BUG 详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/33500ce7ee15d6677b401f587a20e05bcb56bbef" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; 【优化】修正 ms-duplex 绑定 VM 某个子 VM 的属性，input 值修改后没有同步到 vm.$model 的 BUG 详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/106cd1ec23d353be386d31c6ef8ec6fd17f9fef2" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; 【优化】修正 avalon.mix 方法拷贝 VBScript 对象时抛错的 BUG  详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/a46184526f91de9253c96774bcc3bc1c922c62ca" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; 【优化】修正 IE6 下因为 for in 循环导致 isPlainObject 不准的 BUG  详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/7216cebd08edfacbc219c8de283eb5553cf16991" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; 【优化】将 ms-if 去掉的元素都移动 head 标签的 avalon 标签下 详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/22ce6af2522a8ef63189535bd1a06452bcd85e18" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; 【优化】让 date 过滤器能像 chrome 那样支持更多日期格式详见&lt;a href="https://github.com/RubyLouvre/avalon/commit/6984a91de534c6df54755d86ad1ee2b191079599" rel="nofollow" target="_blank" title=""&gt;这里&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;本次升级主打的是&lt;a href="http://www.html-js.com/article/Avalon-tutorial-23-msduplex-2" rel="nofollow" target="_blank" title=""&gt;ms-duplex 2.0&lt;/a&gt;，大家可以到这里一窥其强大！ms-duplex2.0 相对于旧的 ms-duplex 只能将 element.value 简单地同步到 VM 中，它添加了自动转换类型的功能（核心库），光标引导（avalon.mask）,数据格式化（参看 avalon.mask 的第三个例子，将用户输入内容自动插入千分符），验证机制 (avalon.validation)。&lt;/p&gt;

&lt;p&gt;第二大新特性就添加了 avalon.scanCallback 这新方法，允许用户在扫描后进行操作。有了这东西，什么 data-include-rendered, data-repeat-rendered, data-with-rendered 就没有存在的必要了。以后它们内部全部用 avalon.scanCallback 实现。&lt;/p&gt;

&lt;p&gt;从 1.3.3 起，我就着手开发静态收集依赖机制，以此为契机，发现许多要改良的地方，全部放到一个叫 avalon.$events.js 的版本上。但经过几个月的研究，发现静态收集依赖，是对压缩不友好的，像 angular 那样需要引入许多奇异的方式来规避这问题。因此我最终放弃这东西，以后改用其他方式提高性能。未来将着力升级三柱臣与 avalon.observe.js。&lt;/p&gt;

&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/495346/o_1410250398697-logos.jpg" title="" alt="xxx"&gt;&lt;/p&gt;

&lt;p&gt;朋友们用 avalon 做的东西&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;a href="http://as.baidu.com/a/item?docid=4474290&amp;amp;pre=web_am_se&amp;amp;f=web_alad@next&amp;amp;qq-pf-to=pcqq.group" rel="nofollow" target="_blank" title=""&gt;移动应用：读酷&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="https://chrome.google.com/webstore/detail/prefix/gjpcbbbopajjjnkbkeaflldnocoppcpc" rel="nofollow" target="_blank" title=""&gt;chrome 插件：饭否客户端&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="https://note.wiz.cn/login?redirectUrl=https%3A%2F%2Fnote.wiz.cn%2Fweb" rel="nofollow" target="_blank" title=""&gt;为知笔记&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="https://vip.wps.cn/" rel="nofollow" target="_blank" title=""&gt;金山 WPS office 会员中心&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.docer.com/" rel="nofollow" target="_blank" title=""&gt;稻売儿&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://www.sangxiazichan.com/" rel="nofollow" target="_blank" title=""&gt;桑夏资产官网&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://crm5demo.vcb.cn/Account/Login" rel="nofollow" target="_blank" title=""&gt;企业级应用：超博 CRM 客户关系管理系统&lt;/a&gt; (帐号： &lt;strong&gt;crm_ceo&lt;/strong&gt; 密码： &lt;strong&gt;nncb_ceo&lt;/strong&gt; )&lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/zhangchunlin/avalon-uliweb-examples" rel="nofollow" target="_blank" title=""&gt;uliweb Python 框架与 avalon 的组合示例&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="https://github.com/darkbluegood/domain" rel="nofollow" target="_blank" title=""&gt;avalon+jQuery 实现域名注册查询&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://wvovo.com/avalon/" rel="nofollow" target="_blank" title=""&gt;路由器示例&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://acts.qpdiy.com/apps/Voting/index.php" rel="nofollow" target="_blank" title=""&gt;边锋活动页&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://5233.wiisocl.com/" rel="nofollow" target="_blank" title=""&gt;记者考试题&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;a href="http://qiangtou.github.io/js/2014/05/09/2048/" rel="nofollow" target="_blank" title=""&gt;基于 avalonJS 实现的 2048 游戏&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;期待大家的加入！&lt;/p&gt;</description>
      <author>cheng19840218</author>
      <pubDate>Sat, 15 Nov 2014 15:25:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/22699</link>
      <guid>https://ruby-china.org/topics/22699</guid>
    </item>
  </channel>
</rss>
