ノックアウトバインディングを持つ要素をDOMにロードする必要がある状況にありますが、これらのバインディングを常に評価する必要はありません。次の例では、意味については内部divを参照してください。
<ul data-bind="foreach: planets">
<li>
Planet: <b data-bind="text: name"> </b>
<div data-bind="if: capital">
I still want to load this text for later display, when I define "capital"
Capital: <b data-bind="text: capital.cityName"> </b>
</div>
</li>
</ul>
<script>
ko.applyBindings({
planets: [
{ name: 'Mercury', capital: null },
{ name: 'Earth', capital: { cityName: 'Barnsley' } }
]
});
</script>
私の特定のシナリオは、DOMにロードしている要素の「編集中」と「編集なし」のテンプレートがあり、どちらもページにロードされているというものです。この要素の新しいインスタンスをページに追加すると、「編集していない」テンプレートが読み込まれ、まだ定義されていない値が検索されるため(ユーザーが新しいオブジェクトに追加しているため)、問題が発生します。
私の特定の例:
<!-- ko foreach: books -->
<div data-bind="visible: !editing()" class="row-fluid card-box">
<div data-bind="visible: !isPaperback()"> // I want to load this but not evaluate the isPaperback because the user hasn't defined that yet - currently getting null reference errors here
</div>
</div>
<div data-bind="visible: editing" class="row-fluid card-box">
</div>
<!-- /ko -->
私が考えることができる1つの解決策は、上記の私の質問と対になっていますが、これを機能させるためのより良い方法があれば、私は間違いなく提案を受け入れます。ユーザーが「追加」をクリックすると「books」配列にプッシュされる「newBook」オブジェクトのデフォルト値をnull以外にする方がよいでしょうか。