2016-03-21 14 views
1

Es wurde ein benutzerdefiniertes Foo Widget definiert, das über einen lokalen `Balken'-Wert verfügt. Und eine onClick-Funktion, die den "Balken" in etwas ändert.Dojo: Widget-Instanzen teilen sich dieselbe Variable

nun mehrere Instanzen von Foo definiert deklarative innerhalb einer HTML-Vorlage wie folgt aus:

<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"> 

Das Problem ist, dass jeder dieser Eingänge eine eigene Instanz von foo Variable haben sollte, aber aus irgendeinem Grund sie Benimm dich wie nur eins!

>> clicking foo1 -> foo1.foo = 'bar' 
>> clicking foo2 -> foo2.foo = 'baz'.. but foo1.foo is set to 'baz' as well.. why? 

Wie sicher zu machen, jedes Widget seinen eigenen foo Variable hat?

+1

Können Sie den Widget-Code hier hinzufügen? Ich denke, ich könnte die Antwort wissen, aber ich habe nicht genug Informationen zu antworten. –

+0

Hört sich an, als ob die Variable definiert ist. –

Antwort

2

In Ihrer Frage haben Sie nicht Ihren Code für Foo.js hinzugefügt, so dass es schwierig ist, Ihr Problem zu verstehen.

Aber wenn Sie für eine deklarative Ansatz gehen, könnten Sie Ihre Eigenschaft pro Instanz über data-dojo-props übergeben.

Im folgenden Beispiel übergeben Sie den Wert myProp in Ihrem HTML-Markup. Sie können sehen, dass der Property-Instanz beim Abrufen dijit/registry hinzugefügt wird.

Beispiel, bitte Konsole öffnen:

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); 
    }); 
}); 

Mehr Informationen über declarative syntax can be found here.

Verwandte Themen