TAT.dnt 强大的 observejs
In 未分类 on 2015年05月07日 by view: 2,399
6

写在前面

各大 MVVM 框架的双向绑定太难以观察,很难直观地从业务代码里知道发生了什么,我不是双向绑定的反对者,只是认为双向绑定不应该糅合进底层框架,而应该出现在业务代码中,或者是业务和框架之间的代码上,由开发者实现,由开发者决定观察什么,决定响应什么。
以及 Object.observe 的支持度不够好(http://caniuse.com/#search=observe),再者 Object.observe 的功能太弱(如对象内数组的变化无法监听)。
所以就有了 observejs。

observe.js 意义

* 监听任意对象的任意数据变化
* 作为业务和框架之间的中间件存在
* 作为 mv*框架中的监听模块(当然我是相当反对)

3 分钟精通 observe.js

对象字面量

数组

复杂对象

普通对象

原理

监听对象

利用 Object.defineProperty, 以及内建 "__属性名" 来保存真正的 " 属性名" 的值。

监听数组

对 Array 的所有方法进行了 mock, 上面的 target 是被监听的 array, 其所有方法被重写,然后内部执行,执行的过程中,如果属于 edit 操作, 如 concat, pop, push 等,都会触发 onPropertyChanged。

Github

https://github.com/kmdjs/observejs

现在开始,请愉快地使用吧!

原创文章转载请注明:

转载自AlloyTeam:http://www.alloyteam.com/2015/05/qiang-da-di-observejs/

  1. meepo 2015 年 6 月 9 日

    建议你看一下 vue.js

  2. element 2015 年 5 月 20 日

    不用轮询应该监听不了 delete 的

    • TAT.dnt

      TAT.dnt 2015 年 5 月 21 日

      监听删除对象的属性值没有意义啊。

  3. flicat 2015 年 5 月 13 日

    Array 的 length 属性没有监听。

发表评论