knockout.js MVVM如果条件在IE8中不起作用

时间:2014-03-23 05:31:58

标签: knockout.js

我的代码低于一。如果条件在IE9& IE8。

<select id="ProductsList" data-bind="foreach: controlConfig, value: $root.Name">
    <!--ko if:$data.Type=='List_Item-Instruction'-->
         <option data-bind="text: $data.DescriptionText"></option>
    <!--/ko-->
    <!--ko if:$data.Type=='List_Item-Category' || $data.Type=='List_Item'-->
         <option data-bind="text: $data.Name"></option>
    <!--/ko-->
</select>

任何帮助?

2 个答案:

答案 0 :(得分:2)

有很多更好的方法可以做到这一点。

<select id="ProductsList" data-bind="foreach: controlConfig, value: $root.Name">
    <option data-bind="text: ($data.Type == "List_Item-Instruction") ? $data.DescriptiveText : $data.Name"></option>
</select>

或者,根据您的对象结构,检查DescriptiveText是否为null

 <select id="ProductsList" data-bind="foreach: controlConfig, value: $root.Name">
    <option data-bind="text: !!$data.DescriptiveText() ||  $data.Name()"></option>
</select>

如果属性是可观察的,您可能还需要打开属性。

<option data-bind="text: ($data.Type() == "List_Item-Instruction") ? $data.DescriptiveText() : $data.Name()"></option>

答案 1 :(得分:0)

<select id="ProductsList" data-bind="foreach: controlConfig, value: $root.Name">
    <!--ko if:$data.Type=='List_Item-Instruction'-->
         <option data-bind="text: $data.DescriptionText"></option>
    <!--/ko-->
    <!--ko if:$data.Type=='List_Item-Category' || $data.Type=='List_Item'-->
         <option data-bind="text: $data.Name"></option>
    <!--/ko-->
</select>

这在IE8中不起作用的原因是因为IE *从select元素中删除了注释。如果您在IE8中检查html,您会注意到淘汰评论已经消失:(。QBM5为此问题提供了一些解决方案。我建议使用select binding。您还需要如果您使用的是2.3之前的版本,那么您在选择绑定上遇到多个绑定问题。您可以在ryan niemeyer的blog找到更多相关信息。