【问题标题】:update Knockout observablearray item property更新 Knockout observablearray 项目属性
【发布时间】:2013-05-07 22:48:27
【问题描述】:

我正在使用 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); });
    }
};

【问题讨论】:

    标签: javascript knockout.js viewmodel signalr


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!您的答案并不完全是我所需要的,因为我确实将属性标记为 ko.observable(),但您为我指明了正确的方向。在向集合中添加项目时,我正在添加一个对象(从服务器返回),该对象与我要添加的对象具有相同的属性。我只需要实例化该对象类型的一个实例并相应地设置属性值,然后将该对象添加到集合中,而不是从服务器返回的那个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多