簡體   English   中英

在dojo中將數據從一個選項卡綁定到另一個選項卡(在選項卡打開?)

[英]Binding data from one tab to another in dojo (on tab open?)

我一直在使用dojo 1.7並有兩個標簽。 我在一個選項卡中的字段中設置了一個值,該選項卡需要進入另一個選項卡上的另一個字段。 我似乎記得有一種方法可以在1.7+打開一個標簽時執行一個javascript例程,但是對於我的生活,我無法找到這樣做的參數。 我計划執行javascript以通過dojo.byId讀取值,然后只在其他選項卡中填充值。 這是除非有人知道將一個選項卡中的值綁定到另一個選項卡中的另一個字段的更簡單方法。 那將是SWEET!
像往常一樣,謝謝你的建議。 珍妮

對於單個ad hoc同步,我建議使用dojo/Stateful watch方法,這是一個可用於每個dijit小部件的mixin(更准確地說,是每個dijit/_WidgetBase子類的類)。 它允許監視更改的值,而不是在函數調用上掛鈎事件。

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

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

在jsFiddle看到它的行動: http//jsfiddle.net/phusick/YyNCk/

對於更復雜的情況,請參閱我對Synchronize相互依賴的Dojo小部件/值的回答,並查看一個工作示例: http//jsfiddle.net/phusick/HCx3w/

編輯:您的原始問題的答案是選項卡的ContentPane方法_onShow上的dojo/aspect

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

我把它添加到前面提到的jsFiddle中

為了完整起見,您可以輕松使用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);
                  });
                });
            }
        });
});

注意,如果您需要'linkedInput'是雙向的 - 您需要在watch函數中創建互斥鎖。 否則一個輸入設置另一個。 在其他設置上觀看一個,同時在一個輸入中觀看值再次設置另一個,依此類推。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM