2012-08-03 4 views
1
function MyViewModel() { 
    var self = this; 
    this.firstName = ko.observable('Planet'); 
    this.lastName = ko.observable('Earth'); 
    this.computedState = ko.observable(false); 

    this.fullName = ko.computed({ 
     read: function() { 
      console.log("READ");    
      return this.firstName() + " " + this.lastName(); 
     }, 
     write: function (value) { 
      console.log("WRITE");  
      var lastSpacePos = value.lastIndexOf(" "); 
      if (lastSpacePos > 0) { // Ignore values with no space character 
       this.firstName(value.substring(0, lastSpacePos)); // Update "firstName" 
       this.lastName(value.substring(lastSpacePos + 1)); // Update "lastName" 
      } 
     }, 
     owner: this, 

     disposeWhen : function(){ return self.computedState(); } 
    }); 
} 

ko.applyBindings(new MyViewModel()); 

계산 된 관찰 가능 트리거는 심지어 처분됩니다. 그게 올바른 행동인가요? 나는 이유를 알지 못한다. JSFIDDLE EXAMPLEComputed Observable 여전히 트리거 할 수 있습니다. 그게 올바른 행동인가요?

+0

문제를 정확히 설명 할 수 있습니까? – askmish

+0

사실 나는 그 행동을 이해하려고 애쓰는 데 문제가 없다. 저것은 나에게 그것의 처분조차 쓰는 방아쇠를 당기는 이해되지 않는다. 내가 볼 수없는 어떤 유익이 있습니까? – Luffy

답변

1

계산 된 관찰 가능을 삭제하면 모든 구독이 정리됩니다. 따라서 여전히 쓸 수는 있지만 read 함수는 다시 실행되지 않습니다. 처분은 계산 된 값을 null로 만들지 않으며, 느린 구독이 없는지 확인하기위한 것입니다.

예를 들어이 업데이트 된 샘플에서는 계산 된 값을 삭제하고 firstName 필드를 변경해보십시오.

http://jsfiddle.net/rniemeyer/smwwb/13/

+0

감사합니다. – Luffy

관련 문제