2012-05-29 7 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 - 여기에 표시된 모두) 해봐요 즉 호출되지는 결코()가 호출되지 않습니다.

개체 수준에서 관찰자가 정상적으로 작동합니다. 나는 그들을 '계급'수준으로 만들려고 할 때만이다. 피드백을 환영합니다.

감사

답변

3

문제는 당신이 실체화 오브젝트 후 수업을 재개하고 있다는 점이다. 클래스를 다시 열면 각 인스턴스가 업데이트되지 않는 것 같습니다. 내가 잘못 아니에요 경우

을 수행 할 수 있습니다 다음 userService를 instanciating하기 전에 클래스를 재 오픈

  • 직접 userService을 재 오픈

    App.BaseService.reopen({ 
        onAction: function() { 
        this.doSomething(); 
        }.observes('action') 
    }); 
    
    App.BaseService.reopen({ 
        actionChanged: Ember.observer(function() { 
        this.doSomething(); 
        }, 'action') 
    }); 
    
  • (이 jsfiddle 참조) (이 jsfiddle 참조) .

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

는 더 좋은 해결책이있을 수 있지만, 나는 그들을 알고하지 않습니다.

+0

정보 주셔서 감사합니다! 제 경우에는 객체를 인스턴스화 한 후 클래스를 다시 열어야합니다. 내 시나리오에서는이 솔루션을 적용 할 수 없지만 Ember의 현재 동작이 무엇인지 설명하기 때문에 응답을 "대답"으로 표시합니다. 더 나은 대안이 나타나면 공유하십시오. 다시 한 번 감사드립니다. – Flexer

관련 문제