Dojo:小部件实例共享相同的变量
Dojo: widget instances share the same variable
定义了一个自定义Foo
小部件,它具有本地"bar"值。还有一个将"bar"更改为某些内容的 onClick 函数。
现在,Foo
的多个实例在 HTML 模板中被定义为声明式的,如下所示:
<input id="foo1" data-dojo-type="path-to-wiget/Foo">
<input id="foo2" data-dojo-type="path-to-wiget/Foo">
<input id="foo3" data-dojo-type="path-to-wiget/Foo">
问题是这些输入中的每一个都应该有自己的foo
变量实例,但由于某种原因,它们的行为就像只有一个
>> clicking foo1 -> foo1.foo = 'bar'
>> clicking foo2 -> foo2.foo = 'baz'.. but foo1.foo is set to 'baz' as well.. why?
如何确保每个小部件都有自己的foo
变量?
在您的问题中,您没有为Foo.js
添加代码,因此很难理解您的问题。
但是,如果您要采用声明式方法data-dojo-type
则可以考虑使用 data-dojo-props
为每个实例传递属性。
在下面的示例中,您将 myProp
的值传递到 HTML 标记中,当您使用 dijit/registry
检索属性实例时,可以看到该值正在添加到属性实例中。
示例,请打开控制台:
https://jsfiddle.net/e5dx8nue/
<input id="foo1" data-dojo-type="dijit/form/Button" data-dojo-props="myProp: 'foo1'">
<input id="foo2" data-dojo-type="dijit/form/Button" data-dojo-props="myProp: 'foo2'">
<input id="foo3" data-dojo-type="dijit/form/Button" data-dojo-props="myProp: 'foo3'">
require(['dojo/parser', 'dijit/registry'], function(parser, registry) {
parser.parse().then(function() {
var widget1 = registry.byId('foo1'); // print foo1
var widget2 = registry.byId('foo2'); // print foo2
var widget3 = registry.byId('foo3'); // print foo3
console.log(widget1.myProp);
console.log(widget2.myProp);
console.log(widget3.myProp);
});
});
有关声明性语法的更多信息,请参阅此处。
相关文章:
- 在索引.html和应用.js [node.js] 之间共享变量
- 在Knockoutjs中的ViewModels之间共享变量状态
- 共享变量和多个控制器AngularJS
- 在两个浏览器选项卡之间共享变量范围
- Javascript创建函数,以便在其他函数之间共享变量
- AngularJS:如何与其他控制器共享作用域函数和变量
- 为什么原型允许多个实例共享变量
- 关于node.js/javascript在文件之间共享变量
- Javascript ES6共享类变量
- 在 AngularJS 和非 AngularJS 弹出窗口之间共享变量
- 面向对象的 JavaScript 共享方法变量
- nodejs-settimeout是否在不同的循环中共享变量
- 在Ember.js中的方法之间共享变量上下文
- 使用NodeJS与客户端共享变量
- 在页面之间共享变量
- 共享工作者确实共享变量
- 在Javascript中的函数之间共享变量
- MVC ASP 和 Javascript 变量共享
- 为什么这些 JavaScript 变量共享范围
- (JS)为什么两个日期类型变量共享相同的内容