2013-10-16 97 views
0

我正尝试在顶部使用空白选项创建一个选择下拉菜单。它在Chrome中正常工作,但不在IE中(使用IE 9)。什么是错的这个部分:Knockout JS和IE功能

<!-- 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足以看到我想要完成的事情。 如果需要,我会添加更多信息。 谢谢 杰森

+0

你是什么意思,它不在IE9中工作?什么是错误你得到了什么或者你看到什么问题? – nemesv

+3

看看这个答案:http://stackoverflow.com/questions/18383680/knockoutjs-container-less-template-inside-select-foreach-option-not-working-wit/18402603#18402603。基本上,IE删除这些评论和KO从来没有看到他们。 –

+0

@nemesv - 我希望jsfiddle能够证明我遇到的问题,一张图片描绘了千言万语,无论如何感谢您的反馈 – Jay

回答

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

在我去了一个模板解决方案结束:

<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绑定。