对设计模式的理解
来源:互联网 发布:C语言下列叙述错误的是 编辑:程序博客网 时间:2024/05/18 01:51
MVVM
- mvvm由model -> view, model <- view的原型演化而来(也就是说交互存在两个方向:v -> m, v <- m),在二者之间加入vm解耦。
- v收到用户指令要改动m,不能直接访问m,必须使用vm提供的方法间接访问m,所以v的结点可能需要提供到m中映射数据的索引或引用。
- vm应监控m中的数据,一旦数据有变,vm通知数据对应的v节点,所以,vm中应有v节点和对应数据的binding。
- 那么v和m中的数据和ui组件如何绑定呢?可将数据结构处理为类似哈希表的形式:生成共同的id,在v和m中对应的对象可使用id提取。
knockout
- 可能使用了观察者模式,在ko.observable中埋伏了.fire(),每当调用observable对数据进行更改时,fire()会通知viewmodel,以这种方法监控对数据的调用。以下是我理解的实现方式:
function observable(value){ return function(replaceVal){ if(replaceVal){ ko.fire() //通知viewModel有改动 value = replaceVal; }else{ return value; } }}
- 用data-bind绑定view和model。考虑到表现和行为的分层,data-bind最好在js中的init函数中写入。
- 在octopus模式中,对data的取用往往需要在octopus对象上增添一个相应的method,这很笨拙且浪费资源。ko用obsevable返回的函数来代理data变量,解决了这个问题。
- data-bind=”text: xx”可以理解为text(context.xx),text是ko的method{把context.xx写入节点的text},冒号后面的是参数。
- data-bind也可以绑定各种表达式(函数,三元操作之类的).
- data-bind=”click: foo”,回调函数foo调用的方式是context.foo()
- ko.applyBindings(obj)会绑定obj为binding context root,foreach:和with:会使部分节点范围内的binding context变小
- 若要访问binding context范围外的数据,可使用binding context提供的变量$parent 、$data、$root等等
- ko的事件会将触发事件的节点上的binding-context对象作为this参数传给handler
this.a = ko.obsevable(1); this.a = ko.obsevable(1); this.sum = ko.computed(function)(){ return this.a() + this.b() }, this)
ko.computed的原理:当你修改a时,必然是a(newValue),调用a会触发computed中的匿名回调函数从而更新sum的值;computed的监控在a、b是对象的时候对a、b的属性无效,因为此时a、b是指针,当它们的属性变化(比如增加一个属性)时,a、b指向的内存地址并没有变,而且,修改a的属性只需要a().attr = newValue
,没有给a传递val,ko将操作识别为读取而不是写。
阅读全文
0 0
- 对设计模式的理解
- 对设计模式的理解
- 对设计模式的理解
- 对设计模式的理解
- 对设计模式的理解
- 对设计模式的理解
- 对设计模式理解
- 对结构型设计模式的理解
- 我对设计模式的理解(一)
- 我对设计模式的理解(二)
- 我对一些设计模式的理解
- 对结构型设计模式的理解
- 设计模式之对反射的理解
- 对设计模式六大原则的理解
- 对单例设计模式的理解
- 我对设计模式的理解
- 再谈对设计模式的理解
- 我对设计模式的理解
- hdu5459
- 用mycat做读写分离:基于 MySQL主从复制
- 开篇
- 文章标题
- JS修改属性的默认特性(属性描述符)
- 对设计模式的理解
- C# mvc 中把带 html标签的字符 当作 html标签 显示到页面
- struts2 文字过滤拦截器
- 深入浅出妙用 Javascript 中 apply、call、bind
- 关于最后
- LeetCode113. Path Sum II
- 通过OllyDbg调试windows窗口程序
- 【Spring笔记】2. XML装配Bean
- 11.服务链路追踪(sleuth+zikpin)