Javascript 我的可观察数组没有更新,我这样做正确吗?
My console.log(self.tagbuttons()[0][id])输出正确的bool值,但该值不会在数组中更新。这是我的html: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
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})
]);