Dojo:小部件实例共享相同的变量

Dojo: widget instances share the same variable

定义了一个自定义 Foo 小部件,它具有本地“栏”值。还有一个将 '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.

传递每个实例的 属性

在下面的示例中,您在 HTML 标记中传递了 myProp 的值,当您使用 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);
  });
});

有关 declarative syntax can be found here 的更多信息。