在RP尼迈耶的文章Knockout.js性能缺陷#3 -所有绑定火一起 ,一种方法来建立一个下拉列表提供:
<select data-bind="value: selectedOption">
<!-- ko foreach: options -->
<option data-bind="attr: { value: id }, text: name"></option>
<!-- /ko -->
</select>
这段代码也从制品的jsfiddle。
http://jsfiddle.net/rniemeyer/QjVNX/
然而,当我使用的一个项目建立一个选择的这个方法,它工作得很好,直到我在Internet Explorer 8测试IE8失败,“无法解析绑定”。
事实上,从IE8文章运行小提琴也导致错误。 有没有建立一个方式IE8的选择 (我假设IE8或以下),使用基因敲除的的foreach?
是的,这肯定是一个问题。 我将不得不更新帖子。 IE会从内部选择剥离评价。
下面是我们看到在github上的问题类似: https://github.com/SteveSanderson/knockout/issues/578
一个解决方案是使用麦可思的repeat
绑定: https://github.com/mbest/knockout-repeat 。
其中之一,它可以让你做的事情是多次重复单个元素具有不同的上下文。 所以,在这种情况下,它会起到类似无容器语法,只是没有注释。
样品与重复: http://jsfiddle.net/rniemeyer/QjVNX/
您也可以选择使用从文章(其它技术isolatedOptions
),除非你需要在你选择的元素更多的控制。
虽然这是一个问题,我们实在没有必要使用“的foreach”在这里。 淘汰赛包括“选择”的选择很愉快地工作在IE8结合。
请在这里看到的文档http://knockoutjs.com/documentation/options-binding.html
<select data-bind="value: selectedOption">
<!-- ko foreach: options -->
<option data-bind="attr: { value: id }, text: name"></option>
<!-- /ko -->
</select>
可以改为:
<select data-bind="value: selectedOption, options: options, optionsText: function(item) {return item.name}, optionsValue: function(item) {return item.id}></select>
希望这可以帮助。