dojox mvc 中的两种方式绑定 - 非 dijit,parserExtention
Two way binding in dojox mvc - non dijit, parserExtention
我正在尝试使用 dojox mvc 创建一个 "checkbox-tree",其中取消选中最顶部的复选框将取消选中下面的复选框。
复选框初始 state/value 的数据绑定工作正常,但是当我通过代码将模型项可见 属性 更改为 false(选中的复选框绑定到此 属性)时,复选框保持检查状态。
我可以看到小部件数据模型已将其值更改为 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 文档非常少,尤其是关于这个主题。
已解决。
我只需要在 EditStoreRefListController
上调用 commit()
和 queryStore()
我的模特:
this.model = new EditStoreRefListController({
store: new MemoryStore({ idProperty: "id", data: new StatefulArray() })
});
所以在对模型进行更改后...
this.model.commit();
this.model.queryStore();
很高兴看到您自己解决了问题。从我在代码片段中看到的内容来看,我只是添加一件事以防万一:对于变更观察者(例如模板中的 at()
)要获得变更通知,您需要使用 dojo/Stateful#set()
API(例如stateful.set(“visible”, false)
)而不是直接设置一个属性(例如stageful.visible = false
)。
我正在尝试使用 dojox mvc 创建一个 "checkbox-tree",其中取消选中最顶部的复选框将取消选中下面的复选框。 复选框初始 state/value 的数据绑定工作正常,但是当我通过代码将模型项可见 属性 更改为 false(选中的复选框绑定到此 属性)时,复选框保持检查状态。
我可以看到小部件数据模型已将其值更改为 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 文档非常少,尤其是关于这个主题。
已解决。
我只需要在 EditStoreRefListController
commit()
和 queryStore()
我的模特:
this.model = new EditStoreRefListController({
store: new MemoryStore({ idProperty: "id", data: new StatefulArray() })
});
所以在对模型进行更改后...
this.model.commit();
this.model.queryStore();
很高兴看到您自己解决了问题。从我在代码片段中看到的内容来看,我只是添加一件事以防万一:对于变更观察者(例如模板中的 at()
)要获得变更通知,您需要使用 dojo/Stateful#set()
API(例如stateful.set(“visible”, false)
)而不是直接设置一个属性(例如stageful.visible = false
)。