使用Mapping插件的Knockoutjs Cascading下拉列表:未定义的引用错误

时间:2012-06-19 14:52:54

标签: knockout.js knockout-mapping-plugin knockout-2.0

我正在尝试基于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

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,我已经开始工作了。如果有更好的方法,请告诉我。

Updated fiddle here

我使用了嵌套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>

没有循环的更好的版本是值得赞赏的,肯定会被标记为答案。