2016-03-21 161 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

相關問題