DOJO dijit/registry registry.byId() 不监视小部件
DOJO dijit/registry registry.byId() does not watch a widget?
我需要观察 registry.byId (http://dojotoolkit.org/reference-guide/1.10/dijit/registry.html) 返回的小部件。
我可以从 registry.byId 获取引用,但监视其属性不起作用。知道如何解决这个问题吗?
http://jsfiddle.net/5rpjby7j/
<span data-dojo-type="BusinessCard"></span>
<span data-dojo-type="BusinessCard"></span>
window.State = {
name: 'state: name',
surname: 'state: surname',
custom: 'state: custom',
custom2: 'state: custom2'
};
window.FactoryProperties = function () {
// here you can add private members (closure)
// return an object with common properties for wpis
return {
custom: window.State.custom, // data taken dynamically from state
_setCustomAttr: function (value) {
this.custom = value;
window.State.custom = value;
this.customNode.innerHTML = window.State.custom;
},
custom2: window.State.custom2,
_setCustom2Attr: function (value) {
this.custom2 = value;
window.State.custom2 = value;
this.customNode2.innerHTML = window.State.custom2;
}
};
};
require([
"dojo/_base/declare", "dojo/parser", "dojo/ready",
"dijit/_WidgetBase", "dijit/_TemplatedMixin", "dojo/_base/lang", "dijit/registry"
], function (declare, parser, ready, _WidgetBase, _TemplatedMixin, lang, registry) {
// properties custom for wpi
var prop1 = {
templateString: "<div class='businessCard'>" +
"<div>NAME : <span data-dojo-attach-point='nameNode'></span></div>" +
"<div>SURNAME : <span data-dojo-attach-point='surnameNode'></span></div>" +
"<div>CUSTOM: <span data-dojo-attach-point='customNode'></span></div>" +
"<div>CUSTOM2: <span data-dojo-attach-point='customNode2'></span></div>" +
"<br>" +
"</div>",
name: window.State.name,
_setNameAttr: function (value) {
window.State.name = value;
this.name = value;
this.nameNode.innerHTML = window.State.name;
},
surname: window.State.name,
_setSurnameAttr: function (value) {
window.State.surname = value;
this.surname = value;
this.surnameNode.innerHTML = window.State.surname;
}
};
var propTot = lang.mixin(prop1, window.FactoryProperties());
declare("BusinessCard", [_WidgetBase, _TemplatedMixin], propTot);
ready(function () {
parser.parse();
// watch a widget PROBLEM HERE
var mywidget = registry.byId("BusinessCard_1");
mywidget.watch("name", function () {
alert('name have been updated!!!!!!!!!!!');
});
registry.byId("BusinessCard_1").set("name", 'MODIFIED name from code');
registry.byId("BusinessCard_1").set("custom", 'MODIFIED surname from code');
//registry.byId("BusinessCard_1").set("custom2", 'CUSTOM2 MODIFIED PROGRAMMATICALLY');
console.log(registry.toArray()); // check the registry
console.log(registry.byId("BusinessCard_1"));
});
});
修复在这里http://jsfiddle.net/5rpjby7j/1/
在_setSurnameAttr()
中使用this._set("surname", value)
解决
_setSurnameAttr: function (value) {
window.State.surname = value;
this._set("surname", value)
this.surnameNode.innerHTML = window.State.surname;
}
有用的帖子http://dojo-toolkit.33424.n3.nabble.com/watch-on-custom-widget-not-firing-td3997554.html
相关文章:
- 监视函数从服务返回不起作用,但作用域函数起作用
- Node.js通过scp监视传入归档的目录
- js,对象's状态监视
- Jasmine单元测试在监视服务方法时失败
- 多重配置期间的webpack监视选项
- AngularJS指令监视父级大小的更改
- 在Firebug控制台中监视javascript命名空间变量
- 从指令链接函数监视控制器作用域
- 如何使用jasmine节点监视依赖模块内部的方法
- 监视JavaScript输出,例如console.log()
- 使用jquery和lodash限制监视的输入
- 我应该如何在backbone.mariente中测试/监视此类事件
- 如何监视jQuery AJAX请求
- 在执行JS脚本后监视对DOM的更改
- 为什么AngularJS$scope.watch()在我告诉它监视数组时会停止工作
- 吞噬脚本和监视任务
- 保存全局变量以供指令监视的最佳方法
- webpack-dev-server 不会监视创建的新文件
- 监视激发的Javascript事件(无论浏览器如何)
- DOJO dijit/registry registry.byId() 不监视小部件