Knockout JS& IE功能

时间:2013-10-16 15:21:26

标签: asp.net asp.net-mvc knockout.js

我正在尝试在顶部创建一个带有空白选项的选择下拉列表。它在Chrome中运行良好,但在IE中却不行(使用IE 9)。这部分出了点问题:

<!-- ko 'if': $data === 'Blank' -->
<option data-bind="text: '', value: $data"></option>
<!-- /ko -->
<!-- ko 'if': $data !== 'Blank' -->        
<option data-bind="text: $data, value: $data"></option>                
<!-- /ko --> 

http://jsfiddle.net/EYjyJ/2/

如何在IE中使用它,就像在Chrome中一样? 希望jsFiddle足以看到我想要实现的目标。 如果需要,我会添加更多信息。 谢谢 杰森

2 个答案:

答案 0 :(得分:2)

通常,vitual元素在不将绑定名称作为字符串传递的情况下工作。

<!-- ko if: $data === 'Blank' -->
<option data-bind="text: '', value: $data"></option>
<!-- /ko -->
<!-- ko if: $data !== 'Blank' -->        
<option data-bind="text: $data, value: $data"></option>                
<!-- /ko --> 

但更普遍的是:

  • 如果'Blank'表示默认值,则应考虑使用optionsCaption binding parameter
  • 如果没有,最好的方法是在视图模型中解决它,而不是在绑定中解决它。

    function Option(text) {
        this.text = text;
        this.displayText = ko.computed(function () {
            return (this.text === 'Blank') ? '' : this.text;
        });
    }
    
    function ViewModel() {
        this.options = ko.utils.arrayMap(["Blank", "a", "b"], function (text) {
            return new Option(text);
        });
    }
    

    <option data-bind="text: displayText, value: text" />
    

    这样你最终会得到一个不依赖于虚拟元素的干净标记。

答案 1 :(得分:1)

最后,我选择了模板解决方案:

<select id="jq-my-id" data-bind="template: { name: aoiTemplate, foreach: aoiTypes },value: aoi">
</select>

模板:

<script type="text/html" id="group-aoi-template">
<optgroup data-bind="attr: {'label': $data}, foreach: getAoisFor($data)">        
    <option data-bind="text: $data.text, value: $data.code"></option>        
</optgroup>
</script>
<script type="text/html" id="blank-template">
    <option data-bind="text: '', value: $data.code"></option>
</script>

在我的视图模型中选择正确的模板:

self.aoiTemplate = function (aoiType) {
    return aoiType !== 'Blank' ? 'group-aoi-template' : 'blank-template';
};

由于optgroup,我无法使用optionsCaption绑定。