简体   繁体   English

更新Knockout observablearray项目属性

[英]update Knockout observablearray item property

I'm using ko.utils.arrayFirst to get a matching item from my view model, then trying to update one of it's properties, but I'm getting a "is not a function" error. 我正在使用ko.utils.arrayFirst从我的视图模型中获取匹配项,然后尝试更新其属性之一,但出现“不是函数”错误。 Any help would be appreciated. 任何帮助,将不胜感激。 I'm getting the error when I call match.NewMessage(""). 调用match.NewMessage(“”)时出现错误。 Shouldn't match be an instance of an item in my observable array from my view model? 是否不应该是我的视图模型中可观察数组中某个项目的实例? SendMessage is a function defined on my view model, hence the "self" references, and InstantMessages is defined as a ko.observableArray. SendMessage是在我的视图模型上定义的函数,因此是“自我”引用,而InstantMessages定义为ko.observableArray。

self.SendMessage = function (im) {
    var match = ko.utils.arrayFirst(self.InstantMessages(), function (item) {
        return im.InstantMessageId === item.InstantMessageId;
    });

    if (match) {
        var newMessage = new Chat.Message();
        newMessage.FromUser = self.User;
        newMessage.Text = match.NewMessage;
        newMessage.InstantMessageId = match.InstantMessageId;

        match.NewMessage("");

        self.ChatHub.server.sendMessage(newMessage).fail(function (e) { alert(e); });
    }
};

Just because you've defined InstantMessages as a ko.observableArray(), it doesn't mean that all of the properties in the objects contained in the array are observable as well. 仅仅因为您已将InstantMessages定义为ko.observableArray(),并不意味着数组中包含的对象中的所有属性也都是可观察的。

The NewMessage property needs to be initialised as a ko.observable() NewMessage属性需要初始化为ko.observable()

var im;
im.NewMessage = ko.observable();

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

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