2012-05-29 25 views
0

我有以下情況: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') 
    });   

我的觀察員(我設置它們的方式regrdless - 都在這裏顯示)永遠不會即所謂的doSomething ()永遠不會被調用。

對象級別的觀察者正常工作。只有當我試圖讓他們在'上課'級別。 反饋非常歡迎。

感謝

回答

3

的問題是,你實例化對象之後重新打開類。 它看起來像重新開放的類不會更新每個實例。

如果我沒看錯,你可以:

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

可能有一些更好的解決辦法,但我不知道他們。

+0

感謝您的信息!在我的情況下,我需要在實例化對象後重新打開該類。該解決方案不適用於我的情況,但我會將答覆標記爲「答案」,因爲它解釋了Ember的當前行爲。如果有更好的選擇彈出,請分享它。再次感謝 – Flexer