0

我有以下情况:

    ...
    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() 永远不会被调用。

对象级别的观察者工作正常。只有当我试图让它们处于“课堂”水平时。非常欢迎反馈。

谢谢

4

1 回答 1

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')
    }); 
    

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

于 2012-05-29T07:24:51.990 回答