简体   繁体   English

IE8中的KnockoutJS绑定失败

[英]KnockoutJS binding fails in IE8

The following knockout binding works fine in real browsers, but fails in IE8 (and IE9 in compatibility mode) 以下的淘汰绑定在实际浏览器中工作正常,但在IE8(兼容模式下的IE9)中失败

<li data-bind="attr: { class: id() == $root.currentItem().id() ? 'active' : '' }"> 

在此输入图像描述

Does anyone know why, and how I can fix it? 有谁知道为什么,以及我如何解决它?


Here's the whole code, if that helps: 这是整个代码,如果有帮助:

<div class="toc-outer">
    <ol id="table-of-contents" data-bind="sortable: { data: list, template: 'listTemplate', allowDrop: false, isEnabled: false }" class="toc toc-tree"></ol>
</div>

<script id="listTemplate" type="text/html">
    <li data-bind="attr: { class: id() == $root.currentItem().id() ? 'active' : '' }">
        <div data-bind="attr: { class: 'dropdown' + (id() == $root.currentItem().parentId() ? ' active' : '') }">
            <a href="#" class="toggle">
                <i data-bind="visible:children().length > 0, attr: { class: 'icon-toggle icon-minus hide' + (id() == $root.currentItem().id() ? ' icon-white' : '') }"></i>
            </a>
            <a class="dropdown-toggle menu"
                href="#"
                data-bind="visible:$root.allowEditing"
                data-toggle="dropdown">

                <i data-bind="attr: { class: 'icon-menu icon-list-alt hide' + (id() == $root.currentItem().id() ? ' icon-white' : '') }"></i>
            </a>
            <a class="name" data-bind="attr: {href: hash}">
                <i data-bind="visible: type() == 'settings', attr: { class: 'icon-type icon-settings icon-home' + (id() == $root.currentItem().id() ? ' icon-white' : '') }"></i>
                <i data-bind="visible: type() == 'video', attr: { class: 'icon-type icon-video icon-facetime-video' + (id() == $root.currentItem().id() ? ' icon-white' : '') }"></i>
                <i data-bind="visible: type() == 'data', attr: { class: 'icon-type icon-data icon-signal' + (id() == $root.currentItem().id() ? ' icon-white' : '') }"></i>
                <i data-bind="visible: type() == 'file', attr: { class: 'icon-type icon-file icon-download-alt' + (id() == $root.currentItem().id() ? ' icon-white' : '') }"></i>
                <i data-bind="visible: type() == 'test', attr: { class: 'icon-type icon-test icon-ok-sign' + (id() == $root.currentItem().id() ? ' icon-white' : '') }"></i>
                <span data-bind="text:name"></span>
                <span class="badge draft" data-bind="visible:status() == 'draft'">D</span>
            </a>
            <dl class="dropdown-menu" data-bind="visible:$root.allowEditing">
                <dd><a href="#" data-bind="visible: parentId() !== 0 && !topLevelChild(), click: moveOut" data-toggle="pill" data-target="#item-pane" title="#{TocMoveOut}" class="moveItemOut">#{TocMoveOut}</a></dd>
                <dd><a href="#" data-bind="visible: parentId() !== 0 && !firstSibling(), click: moveIn" data-toggle="pill" data-target="#item-pane" title="#{TocMoveIn}" class="moveItemIn">#{TocMoveIn}</a></dd>
                <dd data-bind="visible: parentId() !== 0 && (!topLevelChild() || !firstSibling())" class="divider"></dd>
                <dd><a href="#" data-toggle="pill" data-target="#item-pane" title="#{TocEdit}" class="edit">#{TocEdit}</a></dd>
                <dd data-bind="visible: parentId() !== 0"><a href="#" class="remove">Remove</a></dd>
                <dd class="divider"></dd>
                <dd><a href="#page" data-toggle="pill" data-target="#item-pane" title="#{TocAddPage}" class="add">#{TocAddPage}</a></dd>
                <dd><a href="#video" data-toggle="pill" data-target="#item-pane" title="#{TocAddVideo}" class="add">#{TocAddVideo}</a></dd>
                <dd><a href="#file" data-toggle="pill" data-target="#item-pane" title="#{TocAddFile}" class="add">#{TocAddFile}</a></dd>
                <dd><a href="#test" data-toggle="pill" data-target="#item-pane" title="#{TocAddTest}" class="add">#{TocAddTest}</a></dd>
                <dd><a href="#data" data-toggle="pill" data-target="#item-pane" title="#{TocAddData}" class="add">#{TocAddData}</a></dd>
                <dd class="divider"></dd>                                
                <dd><a href="#library" data-toggle="pill" data-target="#item-pane" title="#{TocAddLibrary}" class="add add-from-library">#{TocAddLibrary}</a></dd>
            </dl>                            
        </div>
        <span class="divider" data-bind="visible: type() == 'settings'"></span>
        <ol class="toc-child" data-bind="sortable: {template: 'listTemplate', data:children, isEnabled: $root.allowEditing(), beforeMove: beforeTreeItemMove, afterMove: tocSorted, allowDrop: false }"></ol>
    </li>
</script>

It seems IE8 is confused by the word class , so it needs to be in quotes. 似乎IE8被单词class混淆了,所以它需要在引号中。 So 所以

<li data-bind="attr: { class: id() == $root.currentItem().id() ? 'active' : '' }">

becomes

<li data-bind="attr: { 'class': id() == $root.currentItem().id() ? 'active' : '' }">

Is there a reason you stayed away from knockout's "css" binding ? 你是否有理由远离淘汰赛的“css”绑定

http://knockoutjs.com/documentation/css-binding.html http://knockoutjs.com/documentation/css-binding.html

It's good to know you found the problem in IE, and you found a work-around, but as it's not in the documentation for "attr" binding, and the "css" binding seems to be knockout's recommended course of action for applying class names, might it not be confusing for you or others down the road? 很高兴知道你在IE中发现了问题,并且找到了解决方法,但是因为它不在“attr”绑定的文档中,并且“css”绑定似乎是敲除建议的应用类名的操作过程,可能不会让你或其他人感到困惑吗?

From the knockout documentation for "css" binding : “css”绑定淘汰文档

" Purpose 目的

The css binding adds or removes one or more named CSS classes [ emphasis added ] to the associated DOM element. css绑定将一个或多个命名的CSS类 [ 强调添加 ]添加或删除到关联的DOM元素。 This is useful, for example, to highlight some value in red if it becomes negative. 例如,如果它变为负值,则用红色突出显示某些值是很有用的。

(Note: If you don't want to apply a CSS class but instead want to assign a style attribute value directly, see the style binding.)" (注意:如果您不想应用CSS类,而是想直接指定样式属性值,请参阅样式绑定。)“

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM