【问题标题】:JS-Ember: Cannot have my 'class' level observer notifiedJS-Ember:无法通知我的“类”级观察员
【发布时间】:2012-06-03 07:53:13
【问题描述】:

我有以下情况:

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

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

谢谢

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    问题是您在实例化对象后重新打开了一个类。 似乎重新打开课程不会更新每个实例。

    如果我没记错的话,你可以:

    • 在实例化 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')
      }); 
      

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

    【讨论】:

    • 感谢您的信息!就我而言,我需要在实例化对象后重新打开类。该解决方案不适用于我的场景,但我会将回复标记为“答案”,因为它解释了 Ember 的当前行为。如果出现更好的选择,请分享。再次感谢
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多