dojo状态手表不';行不通 require([“dojo/_-base/declare”,“dijit/_-WidgetBase”,“dojo/Stateful”],函数(declare,_-WidgetBase,Stateful){ MaClasse1=声明([\u WidgetBase,有状态]{ 附件一:{'a':'att1_v1','b':'1234'}, id:'mc1', changerAtt1:功能(nv){ 此参数1=nv; } }); MaClasse2=声明([\u WidgetBase,有状态]{ 收件人1:null, id:'mc2', 构造函数:函数(att1){ this.att1=att1; }, 后创建:函数(){ this.watch('att1',函数(name,oldValue,value){//不起作用 console.log(名称、旧值、值); }); } }); var maClasse1=新的maClasse1(); var maClasse2=新maClasse2(maClasse1.get('att1'); maClasse1.changerAtt1({'a':'att1_v2','b':'56789'}); });

dojo状态手表不';行不通 require([“dojo/_-base/declare”,“dijit/_-WidgetBase”,“dojo/Stateful”],函数(declare,_-WidgetBase,Stateful){ MaClasse1=声明([\u WidgetBase,有状态]{ 附件一:{'a':'att1_v1','b':'1234'}, id:'mc1', changerAtt1:功能(nv){ 此参数1=nv; } }); MaClasse2=声明([\u WidgetBase,有状态]{ 收件人1:null, id:'mc2', 构造函数:函数(att1){ this.att1=att1; }, 后创建:函数(){ this.watch('att1',函数(name,oldValue,value){//不起作用 console.log(名称、旧值、值); }); } }); var maClasse1=新的maClasse1(); var maClasse2=新maClasse2(maClasse1.get('att1'); maClasse1.changerAtt1({'a':'att1_v2','b':'56789'}); });,dojo,watch,stateful,Dojo,Watch,Stateful,MaClasse1和MaClasse2类都有共同的属性“att1”,该属性是两个类的单个实体,因为它是一个对象。我不明白为什么att1的值发生变化时MaClasse2实例的这个.watch不起作用。谁能给我解释一下 这是我更正的代码: require(["dojo/_base/declare","dijit/_WidgetBase"],function(declare,_WidgetBase){ MaClasse1 = declare([_WidgetBase]

MaClasse1和MaClasse2类都有共同的属性“att1”,该属性是两个类的单个实体,因为它是一个对象。我不明白为什么att1的值发生变化时MaClasse2实例的这个.watch不起作用。谁能给我解释一下

这是我更正的代码:

        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'));
    });
require([“dojo/_base/declare”,“dijit/_WidgetBase”],函数(declare,_WidgetBase){
MaClasse1=声明([\u WidgetBase]{
});
MaClasse2=声明([\u WidgetBase]{
});
var att1={'a':'att1_v1','b':'1234'};
var maClasse1=新的maClasse1();
maClasse1.set('att1',att1);
var maClasse2=新的maClasse2();
maClasse2.set('att1',maClasse1.get('att1');
maClasse2.watch('att1',function(name,oldValue,value){/
dojo/Stateful#watch
仅在通过其
get
set
API更改属性时触发。您通过直接赋值有效地更改了值,而Stateful无法进行监控

如果您将
changerAtt1
方法更改为以下内容,观察者应正确开火:

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

此外,您不应该同时继承
\u WidgetBase
Stateful
\u WidgetBase
已使用新的
get
set
方法扩展了
Stateful
,因此您只需扩展
\u WidgetBase
。扩展这两种方法很可能会导致错误。

请用英语翻译。这是谢谢你的回答,我已经做了两次修改,你告诉我,它不起作用ago@YvonPLANCADE:如果它不起作用,请更新您的问题并准确指出发生了什么。查看您的代码,不清楚您是否正确尝试了此解决方案。您需要使用
set
for
watch
to调用您的回调。