2015-05-23 62 views
-1
require(["dojo/_base/declare","dijit/_WidgetBase","dojo/Stateful"],function(declare,_WidgetBase,Stateful){ 
    MaClasse1 = declare([_WidgetBase,Stateful],{ 
     att1:{'a':'att1_v1','b':'1234'}, 
     id:'mc1', 
     changerAtt1: function(nv){ 
      this.att1 = nv; 
     } 
    }); 

    MaClasse2 = declare([_WidgetBase,Stateful],{ 
     att1:null, 
     id:'mc2', 
     constructor: function(att1){ 
      this.att1 = att1; 
     }, 
     postCreate: function(){ 
      this.watch('att1',function(name,oldValue, value){ // Doesn't work 
       console.log(name,oldValue, value); 
      }); 
     } 
    }); 
    var maClasse1 = new MaClasse1(); 
    var maClasse2 = new MaClasse2(maClasse1.get('att1')); 
    maClasse1.changerAtt1({'a':'att1_v2','b':'56789'}); 
}); 

MaClasse1和MaClasse2類共同具有屬性'att1',這個屬性是兩個類的單個實體,因爲它是一個對象。我不明白爲什麼當更改att1的值時,MaClasse2實例的this.watch不起作用。任何人都可以向我解釋。dojo狀態監視不起作用

這是我糾正代碼:

 require(["dojo/_base/declare","dijit/_WidgetBase"],function(declare,_WidgetBase){ 

     MaClasse1 = declare([_WidgetBase],{ 
     }); 

     MaClasse2 = declare([_WidgetBase],{ 
     }); 

     var att1 = {'a':'att1_v1','b':'1234'}; 
     var maClasse1 = new MaClasse1(); 
     maClasse1.set('att1',att1); 
     var maClasse2 = new MaClasse2(); 
     maClasse2.set('att1',maClasse1.get('att1')); 
     maClasse2.watch('att1',function(name, oldValue, value){//<--- this doesn't work 
      console.log("Execution du watch: ",name, oldValue, value);//<--- this doesn't work 
     });//<--- this doesn't work 
     console.log('Avant chgt: ',att1, att1 === maClasse1.get('att1'),att1 === maClasse2.get('att1')); 
     att1.a = 'att1_v2'; 
     console.log('Après chgt: ',att1, att1 === maClasse1.get('att1'),att1 === maClasse2.get('att1')); 
    }); 
+0

請翻譯成英文。 – frank

回答

4

dojo/Stateful#watch僅火災時,性能是通過其getset API的改變。您正在通過直接分配有效地更改值,Stateful無法監控。

看守應該正確激活,如果你改變你的changerAtt1方法如下:

changerAtt1: function (nv) { 
    this.set('att1', nv); 
} 

而且,你不應該既繼承和_WidgetBaseStateful_WidgetBase已使用新的getset方法延伸Stateful,因此您應該只需延長_WidgetBase。擴展這兩個可能會導致錯誤。

+0

謝謝你的回答,我已經完成了兩項修改,你告訴我,這是行不通的。 - Yvon PLANCADE 8分鐘前 –

+0

@YvonPLANCADE:如果它不起作用,請更新您的問題並指出具體情況。看着你的代碼,目前還不清楚你是否正確地嘗試了這個解決方案。你需要用'set'來設置你的回調。 – Bucket

+0

這是我的代碼: –