以下をノックアウトでレンダリングしようとしています。
<!-- ko with: address-->
<!-- ko if: address1-->
<span style="display : block">
<span data-bind="varchar : address1"></span>
</span>
<span style="display : block">
<span data-bind="varchar : address2"></span>
</span>
<!-- /ko -->
<!-- /ko -->
問題は、アドレスオブジェクトが存在していても、address1パラメータが含まれていない可能性があることです。パラメータ「address1」がnullの場合、ネストされたスパンをレンダリングしないようにノックアウトしたいのですが。現在、次のエラーがスローされます。
Unable to parse bindings. Message: ReferenceError: address1 is not defined;
どんな助けも大歓迎です。
もしそうなら、あなたの秒を動かすだけのケースではないですか?
<!-- ko with: address -->
<span style="display : block">
<!-- ko if: address1 -->
<span data-bind="varchar : address1"></span>
<!-- /ko -->
</span>
<span style="display : block">
<span data-bind="varchar : address2"></span>
</span>
<!-- /ko -->
ViewModelとアドレスの相互関係を確認する必要があるようです。私は問題なくノックアウトページのサンプルでそれを行うことができます:
<h1 data-bind="text: city"> </h1>
<p data-bind="with: coords">
<!-- ko if: latitude -->
Latitude: <span data-bind="text: latitude"> </span>,
<!-- /ko -->
Longitude: <span data-bind="text: longitude"> </span>
</p>
<!-- ko if: $data.address1 -->
を使用すると、address1
が未定義の場合でもエラーになりません。
address1
が後で入力された場合でも、UIは更新されません(address1
は最初は監視可能である必要があります)。
さまざまな場所から呼び出されたアドレステンプレートがある場合がありました。
私の「国名」データフィールドは、時々countryName
、時々countryDesc
でした。
私はテンプレートをこれに変更しました:
<div data-bind="text: $data.countryName || $data.countryDesc"></div>
これは、$data
エラーは発生しません(RP Niemeyerが指摘)
この動作の原因は、観測可能な「アドレス」の初期データである可能性があります。
このようにビューモデルを初期化している場合:
this.address = ko.observableArray();
その場合、「address」と「address1」はどちらも未定義です。
回避策は、次のようにコードを "ko if"ステートメントにラップして、ブロックの先頭でデータをチェックすることです。
<!-- ko if: $data --> <br/>
<br/>
<span style="display : block"><br/>
<span data-bind="varchar : address1"></span><br/>
</span><br/>
<span style="display : block"><br/>
<span data-bind="varchar : address2"></span><br/>
</span><br/>
<br/>
<!-- /ko -->