2012-11-18 8 views
6

내가 얻지 못하는 몇 가지 사항. KO 문서 (및 여기에 많은 게시물)에 따르면 괄호는 관찰 가능 항목을 쿼리하고 작성할 때 사용해야합니다. 그러나 하위 속성을 바인딩 할 때 괄호를 사용하는지 여부는 중요하지 않습니다.중첩 된 중첩 된 개체 및 괄호

<span data-bind="text: selectedMessage() && selectedMessage().message().subject()"></span> 
<span data-bind="text: selectedMessage() && selectedMessage().message().subject"></span> 

= 둘 다 올바른 값을 반환합니다.

누구에게 설명 할 수 있습니까?

바이올린

: 문서처럼 http://jsfiddle.net/viktorb/DKg74/

답변

6

을 (또는 ko.utils.unwrapObservable에 대한 호출) 괄호로 직접 풀어야합니다.

두 번째 예에서 바인딩 값은 selectedMessage() && selectedMessage().message().subject입니다. 이 표현식이 subject 속성으로 평가되면 KO는 평가 된 값이 관찰 가능하다는 것을 확인하고이를 래핑합니다. (내부적으로 이것은 ko.utils.unwrapObservable에 대한 호출 일뿐입니다).

그러나, 내가 가정있어 message 재산으로 평가하지 않는 표현도 관찰 할 수 있기 때문에, 해당 속성에 액세스하기위한 괄호가 필요하다 (예를 들어 selectedMessage().message.subject은 작동하지 않을 것입니다).

+0

입력 해 주셔서 감사합니다. 매우 도움이됩니다. – judehall

4

는 말한다 : 관찰 가능한의

요점은 그들이 즉, 다른 코드가 변경 통지 싶다고 말할 수있는, 관찰 할 수 있다는 것입니다. 그것이 KO의 기본 제공 바인딩이 내부적으로하는 일입니다. 따라서 data-bind = "text : personName"을 작성할 때 personName이 변경 될 때 텍스트 바인딩이 자체적으로 등록되도록 등록됩니다 (현재 관찰 가능한 값이라고 가정).

observable입니다.

자세한 내용은 관측 자료 읽기 및 쓰기http://knockoutjs.com/documentation/observables.html을 참조하십시오.

나는 당신의 바이올린 당신이 괄호없이 차이를 볼 수 있습니다 약간 수정 한

: 그렇지, 그래서 KO는 당신을 위해 그것을 "언랩"바인딩 값이 관찰 경우 http://jsfiddle.net/DKg74/1/

+0

입력 사항입니다. 매우 도움이됩니다. – judehall