JS-Ember:不能通知我的“班级”观察员

时间:2012-05-29 04:55:53

标签: ember.js

我有以下情况:

    ...
    SN.BaseService = Ember.Object.extend({

        action : null,

        send: function(action) {
            this.set('action', action);
        }
    });
    ...
    SN.userService = SN.BaseService.create({

        login: function() {
              if (some_condition) {
                  this.send("onSuccessfulLogin");
              } else {
                  this.send("onFailedLogin");
              }
        }

    });

    ...

    SN.BaseService.reopen({
          onAction: function() {
              doSomething();
          }.observes('action')
    });

    SN.BaseService.reopen({
          actionChanged: Ember.observer(function() {
              doSomething();
          }, 'action')
    });        

我的观察者(无论我设置它们的方式 - 都显示在这里)都不会被调用,即doSomething()永远不会被调用。

对象级别的观察者工作正常。只有当我尝试将它们放在“班级”级别时。 反馈非常受欢迎。

由于

1 个答案:

答案 0 :(得分:3)

问题是你在实例化对象后重新打开了一个类。 看起来重新打开类不会更新每个实例。

如果我没错,你可以:

  • 在实例化userService之前重新打开课程(请参阅此jsfiddle

    App.BaseService.reopen({
      onAction: function() {
         this.doSomething();
      }.observes('action')
    });
    
    App.BaseService.reopen({
      actionChanged: Ember.observer(function() {
         this.doSomething();
      }, 'action')
    });  
    
  • 直接重新打开userService(请参阅此jsfiddle)。

    App.userService.reopen({
      onAction: function() {
        this.doSomething();
      }.observes('action')
    });
    
    App.userService.reopen({
      actionChanged: Ember.observer(function() {
        this.doSomething();
      }, 'action')
    }); 
    

可能有一些更好的解决方案,但我不知道。