Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新KnockoutJS关联ObservalArray值_Javascript_Knockout.js_Associative Array - Fatal编程技术网

Javascript 更新KnockoutJS关联ObservalArray值

Javascript 更新KnockoutJS关联ObservalArray值,javascript,knockout.js,associative-array,Javascript,Knockout.js,Associative Array,这应该很简单 我有一个带有名称和布尔值的关联可观察数组 this.items = ko.observableArray([ { name: "name1", boolVal: true }, { name: "name2", boolVal: true }, ]); 然后用一个简单的函数来改变布尔值 this.changeValue = function (item) { item.boolVal = false; }; 当我调用changeValue函数时,bool

这应该很简单

我有一个带有名称和布尔值的关联可观察数组

this.items = ko.observableArray([
    { name: "name1", boolVal: true },
    { name: "name2", boolVal: true },
]);
然后用一个简单的函数来改变布尔值

this.changeValue = function (item) {
    item.boolVal = false;
};
当我调用changeValue函数时,boolVal确实会更改,请参阅JSFIDLE中的console.logdata,但视图不会更新。屏幕上的值保持为真。关于KnockoutJS是如何工作的,我一定做出了错误的假设


为了更新用户界面,您需要具有可观察的属性:

this.items = ko.observableArray([
    { name: "name1", boolVal: ko.observable(true) },
    { name: "name2", boolVal: ko.observable(true) },
]);
并将其设置为:

this.changeValue = function (item) {
    item.boolVal(false);
};
ko.array仅跟踪项目的添加和删除。因此,如果其中一个项目发生更改,它不会通知UI。为此,您需要在项目上观察到ko


演示

为了更新用户界面,您需要具有可观察的属性:

this.items = ko.observableArray([
    { name: "name1", boolVal: ko.observable(true) },
    { name: "name2", boolVal: ko.observable(true) },
]);
并将其设置为:

this.changeValue = function (item) {
    item.boolVal(false);
};
ko.array仅跟踪项目的添加和删除。因此,如果其中一个项目发生更改,它不会通知UI。为此,您需要在项目上观察到ko


Demo没有想到这一点,但它很有意义。谢谢这个答案并没有回答关联数组是可观测的问题。这只是一个标准数组。我没有想到,但它很有意义。谢谢这个答案并没有回答关联数组是可观测的问题。这只是一个标准阵列。