【发布时间】:2015-12-19 17:39:41
【问题描述】:
(使用 KnockoutJs 2.0.0)
我的视图模型中有一个电话号码列表。每个电话号码都有一个类型(家庭、工作、手机等)。我想在每个电话号码旁边显示一个图标(基于 fontawesome 类)。
如果我对 css 绑定中的图标进行硬编码,一切正常:
<tbody data-binding="foreach: phoneList">
<tr>
<td><span data-bind="css: {'icon-home' : TypeId() == 1, 'icon-building': TypeId() == 2, ... , 'icon-phone': TypeId() >= 7></span></td>
...
</tbody>
我想用一个函数调用来替换硬编码列表。我最初尝试将函数添加到父对象但没有成功,所以我尝试将函数直接添加到电话对象本身作为函数和ko.computed() - 但这些都不适合我。
我已经编写了一些代码here 来演示这个问题。如果您检查表项的 span 元素,您会发现它几乎看起来好像数据绑定将返回的字符串视为字符数组并根据索引设置类,而不是将返回的字符串视为类。
我确信这很明显,但我一直在努力无济于事。
【问题讨论】:
-
当我将您的 KO 版本从 2.0 更新到 3.0 时,绑定似乎可以正常工作。这使我相信您正在为依赖于较旧 KO 实例的版本使用较新的语法。但是,无论哪种方式,您的计算都需要一些工作才能正确评估。
-
@DanielBrown 我认为它们仍然不起作用:plnkr.co/edit/j4DOkz4vnAJoNt4DfAko。您可以看到最后三个示例中的两个数字都是蓝色的,而想要的效果是红色 1 和蓝色 2。
-
将计算结果更改为
me.getClass = ko.computed(function() { return this.typeId() == 1 ? "mobile" : "business"; }, me);可解决此问题(更新到您的 KO 版本) -
谢谢丹尼尔。这是一个很大的帮助。
标签: javascript css knockout.js