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 に答える