6

私が得られないものはほとんどありません。KOのドキュメント(およびSOに関する多くの投稿)によると、オブザーバブルのクエリと書き込みには括弧を使用する必要があります。しかし、サブプロパティをバインドするときは、括弧を使用するかどうかは問題ではないように思われます。

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

=両方とも正しい値を返します。

誰かが私にこれがなぜであるか説明できますか?

フィドル: http: //jsfiddle.net/viktorb/DKg74/

4

2 に答える 2

6

バインディング値がオブザーバブルの場合、KO がそれを「アンラップ」するので、括弧を使用して (または ko.utils.unwrapObservable を呼び出して) 自分でアンラップする必要はありません。

2 番目の例では、バインディング値は次のとおりselectedMessage() && selectedMessage().message().subjectです。この式がsubjectプロパティに評価されると、KO は評価された値がオブザーバブルであることを認識し、アンラップします。(内部的には、これはおそらく ko.utils.unwrapObservable への呼び出しです)。

ただし、式はプロパティに評価されないmessageため、これも監視可能であると想定しているため、そのプロパティにアクセスするための括弧が必要です (たとえばselectedMessage().message.subject、機能しません)。

于 2012-11-18T21:27:15.207 に答える
4

ドキュメントが言うように:

オブザーバブルの要点は、観察できることです。つまり、他のコードが変更の通知を希望していると言うことができます。これは、KO の組み込みバインディングの多くが内部で行っていることです。そのため、data-bind="text: personName" と記述した場合、テキスト バインディングは、personName が変更されたときに通知されるように登録されます (現在は監視可能な値であると仮定します)。

それは存在observableするかどうかです。

詳細については、http://knockoutjs.com/documentation/observables.htmlのReading and writing observablesを参照してください。

括弧の有無で違いがわかるフィドルを少し修正しました: http://jsfiddle.net/DKg74/1/

于 2012-11-18T21:26:44.163 に答える