Używam Dojo 1.7 i mają dwie zakładki. Mam wartość ustawioną w polu na jednej karcie, która musi przejść do innego pola na innej karcie. Wydaje mi się pamiętać, że istnieje sposób na wykonanie rutyny JavaScript, gdy karta jest otwarta w 1.7+, ale dla życia mnie nie mogę znaleźć parametru, aby to zrobić. Planuję wykonać JavaScript, aby przeczytać wartość za pośrednictwem Dojo.Byid, a następnie po prostu wypełnia wartość na karcie Inne. Oznacza to, że ktoś wie o łatwiejszym sposobem wiązania wartości na jednej karcie do innego pola na innej karcie. To byłoby słodkie!
Jak zwykle dziękuję za radę. Janie

0
Jane Wilkie 29 sierpień 2012, 01:24

2 odpowiedzi

Najlepsza odpowiedź

Dla pojedynczej synchronizacji ad hoc sugeruję przy użyciu metody watch dojo/Stateful, która jest mitiną dostępną z każdym widżetem Dijit (dokładniej każdej klasy, które podklasy dijit/_WidgetBase). Umożliwia zmiany monitorowania zmian w przeciwieństwie do zdarzenia zaczepiającego na wywołaniu funkcji.

var spinner1 = registry.byId("spinner1")
, spinner2 = registry.byId("spinner2")
;

spinner1.watch("value", function(prop, oldValue, newValue) {
    spinner2.set("value", newValue);
});

Zobacz to w akcji w JSFiddle: http://jsfiddle.net/phusick/yynck/

Aby uzyskać więcej kompleksowych przypadków, zobacz moją odpowiedź na Synchronizuj współzależne widżety Dojo / wartości i spojrzeć na przykład pracy: http://jsfiddle.net/phusick/HCX3W/

Edytuj: Odpowiedź na oryginalne pytanie to dojo/aspect w zakładce ContentPane Metoda _onShow:

aspect.after(registry.byId("tab2"), "_onShow", function() {
    console.log("#tab2 is now visible");
});

Dodałem to do wspomnianego JSFiddle.

2
Community 23 maj 2017, 11:56

Po prostu dla kompletności, możesz łatwo korzystać z takich odpowiedzi Phusick:

require(
   ["dojo/_base/declare", "dijit/form/NumberSpinner"], 
   function (declare, Spinner ) 
   {
        declare("my.spinner", [dijit.form.NumberSpinner], {
            linkedInputs: [],
            startup: function() {
                var self = this;
                if(this.linkedInputs) {
                     self.watch("value", dojo.hitch(self, self.setOther));
                }

                return this.inherited(arguments);
            },
            setOther: function() {
                var links = this.linkedInputs, newVal= self.get("value")
                dojo.ready(function() {
                  dojo.forEach(links, function(input) {
                      /*assert if string*/ dijit.byId(input).set("value", newVal);
                  });
                });
            }
        });
});

Uwaga, jeśli potrzebujesz "LinkedInput", aby być dwukierunkowym - musisz utworzyć blokadę Mutex w funkcji zegarka. W przeciwnym razie jedno wejście ustawia drugą. Zegarek na innych ustawiach, podczas gdy oglądanie wartości w jednym wejściu ustawia drugą i tak dalej.

0
mschr 29 sierpień 2012, 08:54