2

使用无容器语法并调用 Knockoutjs 模板时,IE8 无法在 foreach 控制流中正确呈现模板。初始化工作正常,但如果items更改,则渲染错误。这只发生在 IE8 上,9 可以,甚至 7 也可以。

模型

function BrowseModel() {
    var self = this;
    self.items = ko.observableArray();
    self.itemsStep = ko.observable(1);
    self.repopulate = function() {
        self.itemsStep(self.itemsStep() + 3);
        return false;
    };
    ko.computed(function() {
        var arr = [];
        for (var i = self.itemsStep(); i <= self.itemsStep() + 5; i++) {
            arr.push(i);
        }
        self.items(arr);
    }, self);
}

ko.applyBindings(new BrowseModel());

看法

<a href="javascript:;" data-bind="click: repopulate">Change items</a>
<ul>
    <!-- ko foreach: items -->                                                 
        <!-- ko template: { name: 'product_template'} -->
        <!-- /ko -->  
   <!-- /ko -->
</ul>

<ul>
    <li data-bind="template: { foreach: items, name: 'product_template' }"></li>
</ul>


<br />
<div data-bind="text: ko.toJSON($data)"></div>


<script type="text/html" id="product_template">
    <li data-bind="text: $data"></li>
</script>    

我没有发现 IE 8 的行为模式。渲染是随机的。

除了不使用无容器控制流语法之外,我该如何解决这个问题?

小提琴

LE:如果这很重要,我正在使用 F12 开发人员工具

4

2 回答 2

5

修复了 jsFiddle

我已经&nbsp;在内部绑定中添加了一个,它似乎已经解决了这个问题。似乎 IE8 中的淘汰赛不喜欢没有内容的嵌套无容器控件绑定。

请注意,根据我的经验,无容器控件绑定往往会在 IE6-IE8 中表现出不稳定的行为。如果您打算支持这些浏览器,我建议您避免使用无容器控件绑定。几乎所有涉及无容器控件绑定的场景都可以重写为带有数据绑定表达式的 HTML 元素的替代方案。

于 2012-08-31T21:12:41.660 回答
0

我对 IE8 中的这种结构很幸运。当我试图像您在原始帖子中显示的那样将无容器的东西分开时,IE8 抱怨道。通过使用下面显示的语法,它可以正常工作。

<table id="mam-listing-table" border="0" width="100%" cellpadding="2" cellspacing="0">
    <thead>
        <tr valign="top">
            <th class="ms-vh" nowrap="">Team</th>
            <th class="ms-vh" nowrap="" colspan="99">Note Count</th>
        </tr>
        <tr valign="top">
            <th class="ms-vh" nowrap=""></th>

            <!-- ko foreach: Months -->
                <th class="ms-vh" nowrap="" data-bind="text: $data "></th>
            <!-- /ko -->

            <th class="ms-vh" nowrap="" data-bind="text: 'TOTAL as of ' + moment().format('MM/DD/YY')"></th>
        </tr>
    </thead>

    <tbody>

        <!-- ko template: { name: 'Site', foreach: Sites} -->
        <!-- /ko -->  
        <!-- ko template: { name: 'Total'} -->
        <!-- /ko -->  

    </tbody>

</table>
于 2014-10-23T18:48:39.997 回答