【问题标题】:How to use computed method inside foreach in knockout.js如何在knockout.js的foreach中使用计算方法
【发布时间】:2014-09-03 13:57:29
【问题描述】:

我正在玩一些淘汰赛,但我遇到了一些问题。我做了一个例子,你创建了名字,姓氏,然后创建了一个 ko.computed 来制作全名。可以,但是假设我有一个可观察的数组,其中包含很多包含名字和姓氏的对象。如何使用计算函数创建全名?如果我创建类似的东西:

function vm() {
....


self.fullName = ko.computed(function() {
  return self.names().firstName + "" + self.names().lastName;
}

我不能使用它,因为这是一个视图模型方法,并且在 foreach 绑定敲除将查找本地方法(在本例中为 self.names() 的方法)

也不能使用 $root.fullName,因为这样淘汰赛将无法检索到正确的值。

小提琴:http://jsfiddle.net/mtfv6q6a/

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    您可以通过将变量分配给您的虚拟机来调用它。喜欢:

        appModel = new vm();
        ko.applyBindings(appModel);
    

        <h3 data-bind="text: appModel.fullName()"></h3>
    

    这可行,但总是会返回 undefinedundefined http://jsfiddle.net/mtfv6q6a/1/,因为 firstName 不是 names() 的属性

    你宁愿需要一些简单的功能,比如:

    self.returnFullName = function(item) {
        return item.firstName + " " + item.lastName;
    };
    

    并像这样称呼它

    <h3 data-bind='text: appModel.returnFullName($data); '></h3>
    

    http://jsfiddle.net/mtfv6q6a/2/

    【讨论】:

    • 确实有效,但在这种情况下,我可以只做 $root.returnFullName($data)。谢谢
    • 为了理解,你不要调用计算函数,计算函数会在包含的 observable 发生变化时自动调用,所以
    • 感谢 jsfiddle - 通过您的示例,我能够让我的代码正常工作。顺便说一句,在循环中,如果您不想像第一步那样为模型分配变量(“appModel”),则可以调用 $parent.fullName()。
    • 不客气,很高兴它有帮助。您对 "$parent" 也是正确的,但是由于其他一些原因,将其分配给变量很有用,假设您想要 console.log() 所有名称(没有数据绑定,只是脚本),您可以通过 console.log(appModel.names()) 来做到这一点跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 2015-07-30
    • 2012-06-10
    • 1970-01-01
    • 2023-03-05
    • 2013-09-04
    • 2019-08-18
    相关资源
    最近更新 更多