0

Knockout.js Cartの例に基づいてカスケードドロップダウンを作成しようとしていますが、データを取得するためにマッピングプラグインを使用しています。

マッピングプラグインは正常に機能し、テンプレートは正常に機能しています。最初の選択は適切ですが、2番目の選択でエラーが発生します。

エラー:

Uncaught Error: Unable to parse bindings.

メッセージ:ReferenceError:PayCodesが定義されていません。バインディング値:options:PayCodes、optionsValue:'Value'、optionsText:'Text'、value:$ parent.PayCodeId

行を変更する:

<select data-bind="options:PayCodes, optionsValue:'Value', optionsText:'Text', value: $parent.PayCodeId" class='type'></select>

to :(「this」キーワードを追加)

<select data-bind="options:this.PayCodes, optionsValue:'Value', optionsText:'Text', value: $parent.PayCodeId" class='type'></select>

エラーを修正しましたが、2番目の選択がまだ機能していません。オプションはありません。添付のJSONデータに見られるように、PayCodes配列が存在します。

これが問題を複製するフィドルです:http://jsfiddle.net/JLhSx/13/

そして、フォーマットされたJSONは、役立つ場合に備えてここにあります。

助言がありますか?

オリジナルに編集:

追加する

「with:」セクション内では、PayTypeIdのIDが返されるだけなので、「with:」セクションは、期待どおりに完全に監視可能なPayTypeの配列を取得していません。これをリファクタリングして、PayTypesの場合、最初のドロップダウンにリストが表示され、2番目のドロップダウンに選択したPayTypeのPayCodesが表示されるようにするにはどうすればよいですか?

更新されたフィドル

ありがとう!

4

1 に答える 1

0

わかりました、動作しています。もっと良い方法があれば教えてください。

ここでフィドルを更新

ネストされたifでforeachを使用しました。しかし、これは少しハックまたはやり過ぎのようです。今、私はそれがうまくいくことを嬉しく思います!

<td>
    <select data-bind='options:PayTypes, optionsValue:"Id",optionsText:"PayType", value: PayTypeId ' class='type'></select>
</td>
<td data-bind="foreach: PayTypes">
    <!-- ko if: (Id() == $parent.PayTypeId())  -->
       <select data-bind="options:PayCodes, optionsValue:'Value', optionsText:'Text', value:$parent.PayCodeId" class='type'></select>
    <!-- /ko -->
</td>

ループのないより良いバージョンが高く評価され、確かに答えとしてマークされます。

于 2012-06-20T14:08:40.213 に答える