Javascript 我的可观察数组没有更新,我这样做正确吗?

Javascript 我的可观察数组没有更新,我这样做正确吗?,javascript,knockout.js,Javascript,Knockout.js,My console.log(self.tagbuttons()[0][id])输出正确的bool值,但该值不会在数组中更新。这是我的html: function AppViewModel() { self.tagbuttons=ko.observableArray([ {shotbar:false, frozendrinks: false, livemusic: false, patio:false, food:false} ]); self.toggleTag = func

My console.log(self.tagbuttons()[0][id])输出正确的bool值,但该值不会在数组中更新。这是我的html:

function AppViewModel() {
self.tagbuttons=ko.observableArray([
    {shotbar:false, frozendrinks: false, livemusic: false, patio:false, food:false}
    ]);

self.toggleTag = function(data,event) {
    var id = event.target.id;

    self.tagbuttons()[0][id] = !self.tagbuttons()[0][id];
    console.log(self.tagbuttons()[0][id]);
    if(self.tagbuttons()[0][id] == true)
    {
        $(event.target).closest('li').addClass("active");
        console.log(event.target.id+":"+"active");
    }
    else
    {
        $(event.target).closest('li').removeClass("active");
        console.log(event.target.id+":"+"inactive");}
    }
}

ko.applyBindings(new AppViewModel());

在声明MyAppViewModel和加载UI后,需要应用KO绑定:

 <div data-bind="text: tagbuttons()[0].shotbar"></di>

除非应用KO绑定,否则在视图模型之外不会发生任何事情。

这里引用了KO文档:

关键点:observableArray跟踪数组中的对象,而不是这些对象的状态

简单地将一个对象放入observableArray并不能使所有 这个物体的属性本身是可以观察到的。当然可以 如果你愿意的话,让这些属性可以被观察到,但这是一个问题 独立选择。observableArray只跟踪它的对象 保留,并在添加或删除对象时通知侦听器

因此,当您更改数组项的值时,不会通知取消。您可以使用
valuehassmutated
功能手动通知订阅者:

$(document).ready(function(){
    ko.ApplyBindings(new MyAppViewModel())?  
});
或使用
observable
将项目包装在数组中:

self.tagbuttons()[0][id] = !self.tagbuttons()[0][id];
self.tagbuttons.valueHasMutated();
self.tagbuttons = ko.observableArray([
ko.observable({
    shotbar:false, 
    frozendrinks: false, 
    livemusic: false, 
    patio:false, 
    food:false})
    ]);