html代码:
<div id="app1"> <span data-bind="text:name" ></span> </div> <div id="app2"> <span data-bind="text:name"></span> <span data-bind="text:full"></span> <button type="button" data-bind="click:changeName" >换名</button> </div>
js代码:
function rootViewModel(){ this.name = ko.observable('root'); } var rVM = new rootViewModel(); flux.createStore({ state: rVM}); //创建root状态器 var treeNode={ name: ko.observable('node'), changeName:function(){ ko.$store.areas.treeNode.state.name('新名字'); }, full: ko.computed(function(){ //computed的职责:1. 监控其他对象属性的变化,而影响自身对象(flux解决);2. 合并自身对象的几个属性(在function下,有this可解) //不能通过ko.$store访问对象本身,因为首次对象本身还没初始化好 var store = ko.$store; //(store.areas.treeNode? store.areas.treeNode.state.name() : '') 这样也是不行,因为解决第一次通不过,后面肯定不行 return store.state.name(); }) } ko.$store.register('treeNode', flux.createStore({ state: treeNode})); //创建子状态机 var app1 = ko.applyBindings(rVM, document.getElementById("app1")); var app2 = ko.applyBindings(treeNode, document.getElementById("app2"));
五、其他
当然模块化的引用,也是支持。具体实例细节可参考test中的测试示例。
项目的git地址:https://gitee.com/ko-plugins/flux.git,欢迎大家指正和提出宝贵的意见。
以上这篇在knockoutjs 上自己实现的flux(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持黑区网络。