12

使用されているコントロールに基づいて、異なるビットの HTML を使用したいテンプレートがあります。

<!-- ko if: Value -->
    ........
<!-- /ko -->

<!-- ko ifnot: Value -->
    ........
<!-- /ko -->

このコードの意図は、 が定義されている場合Valueは最初のビットを選択し、定義されていない場合は 2 番目のビットを選択することです。ただし、これは常にバインド エラーを引き起こします。これは、コントロールが定義されValue is not definedているかどうかを確認するだけでエラーになると確信しています。Value

これらのifステートメントを使用して、バインディングが定義されているかどうかを確認するより良い方法はありますか?

4

2 に答える 2

37

Valueが本当に定義されていない場合は$data.Value、「未定義」エラーを回避するために使用できます。

于 2013-11-08T16:06:20.430 に答える
2

動的テンプレートを使用できます。ビューモデルでは:

self.valueRenderer = ko.computed(function () {
    return ko.unwrap(self.Value) ? "valueTemplate" : "noValueTemplate";
});

HTMLで:

<div data-bind="template: valueRenderer"></div>

<!-- ... -->

<script type="text/html" id="valueTemplate">
    <!-- some complex template... -->
</script>

<script type="text/html" id="noValueTemplate">
    <div>There is no value...</div>
</script>
于 2013-11-08T16:10:20.540 に答える