dojox mvc中的双向绑定 - 非dijit,parserExtention

时间:2015-05-09 13:36:06

标签: javascript model-view-controller dojo

我试图创建一个"复选框树"使用dojox mvc,取消选中最顶部的复选框将取消选中下面的复选框。 复选框的初始状态/值的数据绑定工作正常,但是当我通过代码将模型项visible属性更改为false(选中的复选框绑定到此属性)时,复选框仍保持选中状态。

我可以看到widget数据模型已将其值更改为false。

我的标记片段:

<script type="dojo/require">
        at: "dojox/mvc/at"
    </script>
    <input type="checkbox" data-mvc-bindings="value: at('rel:', 'id'), id: at('rel:', 'id'), checked: at('rel:', 'visible').direction(at.both)" />

我还尝试通过Chrome开发者控制台将其数据值设置为false,但复选框仍保持选中状态

dijit.registry.byId("dojox_mvc_Templated_199").target
Object {id: "abc", name: "abc", legend: "iVBORw0KGgoAAAANSUhEUgAAABQA..truncated", visible: true, _watchCallbacks: function…}_watchCallbacks: function (a,b,d,r){var t=function(n){if(n){n=n.slice();for(var s=0,r=n.length;s<id: "abc"legend: "iVBORw0K4v5s/UwAAAAASUVORK5CYII="name: "abc"visible: false__proto__: Object

dijit.registry.byId("dojox_mvc_Templated_199").target.visible = false;
false
dijit.registry.byId("dojox_mvc_Templated_199").target
Object {id: "abc", name: "abc", legend: "iVBORw0KGgoAAAANSUhEUgAAABQA..truncated", visible: false, _watchCallbacks: function…}

任何人都知道如何实现这样的双向绑定? dojo文档很稀疏,特别是在这个主题上。

2 个答案:

答案 0 :(得分:1)

很高兴看到你自己解决了这个问题。根据我在代码片段中看到的内容,我只是添加一件事以防万一:对于更改观察者(例如模板中的at())来通知更改,您需要使用dojo/Stateful#set() API(例如stateful.set(“visible”, false))而不是直接设置属性(例如stageful.visible = false)。

答案 1 :(得分:0)

解决。

我只需在commit()

上致电queryStore()EditStoreRefListController

我的模特:

this.model = new EditStoreRefListController({
                store: new MemoryStore({ idProperty: "id", data: new StatefulArray() })
            });

所以在对模型进行更改后......

this.model.commit();
this.model.queryStore();