【问题标题】:Knockout css binding in a foreachforeach 中的淘汰赛 css 绑定
【发布时间】:2012-12-04 03:05:22
【问题描述】:

<ul> foreach 绑定中,我希望淘汰赛为每个<li> 添加一个动态css 类。

我绑定的对象如下所示:

{
    id: 1234,
    class: "foo",
}

我要knockout把每一项的class属性加到对应的<li>上,像这样:

<ul data-bind="foreach: TheList">
    <li data-bind="css: class" />
</ul>

所以我的[有效]输出是这样的:

<ul>
    <li class="foo" />
    <li class="bar" />
    <li class="etc" />
</ul>

我无法弄清楚绑定语法。这个我试过了,

<li data-bind="css: class" />

它会抛出一个错误:

无法解析绑定。消息:SyntaxError:语法错误;绑定值:css:class

我试过了,

<li data-bind="css: $data.class" />

它会抛出一个错误:

无法解析绑定。消息:语法错误:预期标识符;绑定值:css: $data.class

我把class用引号括起来以避免js关键字冲突,

<li data-bind="css: 'class'" />

这不会引发错误,但会产生意想不到的结果。我 100% 肯定“修剪”不是集合中任何项目的 class 属性值之一:

<li class="trim" data-bind="css: 'class'" __ko__1354588574237="ko3">

我不知道在这种情况下如何或是否可以使用计算值,因为 AFAIK 我无法将变量(如$index$data)传递给计算值,因此计算值无法知道哪个要返回 class 的项目。

对于这种情况,合适的绑定语法是什么,可能吗?

解决方案/解决方法

当属性命名为“类”时,这似乎是 IE8 中的css: 绑定问题。如果遇到这种情况,这里有 3 种不同的解决方法:

将字段名称更改为“类”以外的名称(如果您可以控制源)。

或者,您可以修改列表中的对象,以便可以从不同的名称访问该值,即,

for (var i = 0; i < TheList.length; i++)
{
    TheList[i].safeName = TheList[i]['class'];
}

或者,您可以使用 attr: 绑定而不是 css: 绑定,这似乎不会遇到同样的问题,并且可以使用称为“类”的成员,只要它们被包含在引号中:

<li data-bind="attr: { 'class': 'class' } />

【问题讨论】:

    标签: internet-explorer-8 knockout.js


    【解决方案1】:

    这应该可行:

    <ul data-bind="foreach: TheList">
        <li data-bind="css: $data['class'], text: $data['class']" />
    </ul>​
    

    我认为您遇到了class 的关键字问题。 working jsfiddle.

    【讨论】:

    • 谢谢内森。我认为这可能是 IE8 问题...我将不得不在另一个浏览器中检查我的代码。在 IE8(不幸的是,这需要工作)中,jsfiddle 正在抛出“预期的标识符、字符串或数字”。在我的项目中,绑定到 $data['class'] 会产生古怪的“修剪”结果(与我绑定到引号中的 'class' 时相同)。
    • @with,呵呵,我在 ie8 中也看到了同样的东西。诡异的。不要轻视,但为什么不直接更改字段名称?
    • 是的,这不是一个很好的属性名称,数据来自第 3 方 API。我相信你是对的,它与名为“类”的属性有关,我认为这是 css 的一个特定问题:IE8 上的绑定。如果有人遇到这种情况,有一些解决方法:您可以重命名字段(如果您可以控制源)您可以将值复制到对象上的新字段中,或者您可以避免使用 css: 绑定来支持一个 attr:绑定到类元素。
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2013-01-09
    • 2014-05-29
    • 2014-01-10
    • 2013-02-04
    • 2015-03-17
    相关资源
    最近更新 更多