我正在尝试基于Knockout.js Cart example创建级联下拉列表,但使用Mapping插件来获取我的数据。
我的映射插件工作正常,模板工作正常,第一个选择很好,但第二个选择错误。
错误:
Uncaught Error: Unable to parse bindings.
消息:ReferenceError:未定义PayCodes; 绑定值:选项: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为here。
有什么建议吗?
编辑原文:
添加
在我的“with:”部分中只返回我的PayTypeId的ID,因此“with:”部分没有像我预期的那样获得完整的可观察PayTypes数组。我如何重构这一点,以便第一个下拉列表显示一个列表,如果PayTypes,第二个下拉列表显示所选PayType的PayCodes?
更新了fiddle
谢谢!
答案 0 :(得分:0)
好的,我已经开始工作了。如果有更好的方法,请告诉我。
我使用了嵌套if的foreach。这似乎有点hackish或矫枉过正。现在我很高兴它有效!
<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>
没有循环的更好的版本是值得赞赏的,肯定会被标记为答案。