2016-03-21 167 views
1

定义了一个定制的Foo窗口小部件,它具有本地“bar”值。和一个onClick函数,将“bar”更改为某些内容。一个HTML模板里面现在Dojo:窗口小部件实例共享相同的变量

Foo多个实例定义的声明是这样的:

<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变量?

+1

你能在这里添加小部件代码吗?我想我可能会知道答案,但我没有足够的信息来解答。 –

+0

听起来就像它已经到了定义变量的地方。 –

回答

2

在你的问题中,你还没有添加你的代码Foo.js,所以很难理解你的问题。

但是,如果您要使用声明性方法,则可以考虑使用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

相关问题