knockout.js:使用在无容器的foreach 无法在Internet Explorer 8

2019-06-26 14:48发布

在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?

Answer 1:

是的,这肯定是一个问题。 我将不得不更新帖子。 IE会从内部选择剥离评价。

下面是我们看到在github上的问题类似: https://github.com/SteveSanderson/knockout/issues/578

一个解决方案是使用麦可思的repeat绑定: https://github.com/mbest/knockout-repeat 。

其中之一,它可以让你做的事情是多次重复单个元素具有不同的上下文。 所以,在这种情况下,它会起到类似无容器语法,只是没有注释。

样品与重复: http://jsfiddle.net/rniemeyer/QjVNX/

您也可以选择使用从文章(其它技术isolatedOptions ),除非你需要在你选择的元素更多的控制。



Answer 2:

虽然这是一个问题,我们实在没有必要使用“的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>

希望这可以帮助。



文章来源: knockout.js: using a containerless foreach on a 举报