0

我正在尝试基于 Knockout.js Cart 示例创建一个级联下拉列表,但使用 Mapping 插件来获取我的数据。

我的映射插件工作正常,模板工作正常,第一个选择很好,但第二个选择出错。

错误:

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>

修复了错误,但第二个选择仍然不起作用。它永远不会有任何选择。PayCodes 数组存在,如附加的 JSON 数据所示。

这是复制问题的小提琴:http: //jsfiddle.net/JLhSx/13/

格式化的 JSON 在这里,以防万一。

有什么建议么?

编辑原件:

添加

在我的“with:”部分中只返回我的 PayTypeId 的 ID,因此“with:”部分没有像我预期的那样获得完整的可观察的 PayTypes 数组。我该如何重构它,以便第一个下拉列表显示 PayTypes 列表,第二个下拉列表显示所选 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 回答