2014-07-23 2 views
1

계산 된 관측 값을 일부 값으로 설정하고 다시 평가 한 후 null을 반환하면 이전 계산 된 값이 바인딩/GUI에서 사용되고 있음을 발견했습니다 업데이트 중이 아닙니다. 이것은 이상하게 보입니다. 나는 잘못된 행동을하고 있는지 또는 예상되는 행동인지 묻고 싶습니다.계산 된 Observable이 null로 설정 되어도 GUI가 업데이트되지 않음

예 (http://jsfiddle.net/LkqTU/18081/) : 내가 바인딩 css에 사용되는 클래스 이름을 반환하는 계산 된 관찰을 사용하고

. 바인딩은 클래스 이름이거나 전혀 클래스가 아닐 수 있습니다. 템플릿 :

<p data-bind="css: textColour">Coloured text</p> 

'녹색'에 대한 계산 관찰 첫번째 평가하고, 컬러 텍스트 (I 클래스 '녹색'에 대한 CSS를 정의한) 녹색으로 바뀝니다. 계산 된 관찰 가능이 다시 계산되어 null을 반환하면 텍스트 색은 녹색으로 유지됩니다.

that.success = ko.observable(true); 
that.textColour = ko.computed(function() { 
    if (that.success()) { 
     return 'green'; 
    } else { 
     return null; 
    } 
}); 

바인딩에서 클래스를 제거하려면 null이 반환됩니다. 왜이 기능이 작동하지 않습니까? 나는 만약 내가 undefined, 또는 아무것도 전혀 반환하지 않으면 (심지어 undefined), 바인딩 업데이트가 예상대로되고 녹색이 제거된다는 것을 발견했다.

이 문제는 앞으로 계속 나를 막지는 않지만, KO에 대한 나의 이해를 묻는 질문입니다. 누구든지 이것에 대해 밝힐 수 있습니까?

답변

1

이것은 바인딩의 버그로 간주 될 수 있습니다. Github에서 문제를 열어보기를 권합니다. https://github.com/knockout/knockout

또 다른 해결 방법은 빈 문자열을 반환하는 것입니다.

that.textColour = ko.computed(function() { 
    if (that.success()) { 
     return 'green'; 
    } else { 
     return ''; 
    } 
}); 
+0

감사합니다. 마이클 - 문제는 https://github.com/knockout/knockout/issues/1468에서 열었습니다. – steven

관련 문제