更新Knockout observablearray项属性

时间:2013-05-07 22:48:27

标签: javascript knockout.js viewmodel signalr

我正在使用ko.utils.arrayFirst从我的视图模型中获取匹配项,然后尝试更新其中一个属性,但我得到的是“不是函数”错误。任何帮助,将不胜感激。当我调用match.NewMessage(“”)时,我收到错误。不应该匹配我的视图模型中的可观察数组中的项的实例? SendMessage是在我的视图模型上定义的函数,因此是“self”引用,而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); });
    }
};

1 个答案:

答案 0 :(得分:1)

仅仅因为你已经将InstantMessages定义为ko.observableArray(),它并不意味着数组中包含的对象中的所有属性也是可观察的。

NewMessage属性需要初始化为ko.observable()

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