如何在敲除绑定处理程序中更新可观察数组?

时间:2018-09-22 11:23:53

标签: javascript knockout.js

我想在敲除绑定处理程序中更新可观察数组。但是它没有更新。我尝试了以下代码,但没有解决。

 this.DropdownValues = ko.observableArray([
    { id: 0, type: "Arc",Checked:false },
    { id: 1, type: "Eve",Checked:false },
    { id: 2, type: "Ca",Checked:false },
    { id: 3, type: "test",Checked:false },
 ]);

我在绑定处理程序中编写的代码。

 var value =  valueAccessor();
 var valueUnwrapped = ko.unwrap(value);
 console.log("true");
 valueUnwrapped.map(function(item){
     item[Checked]= true; return item; 
 });

 ko.utils.unwrapObservable(value(valueUnwrapped));

但是我的观点仍然没有检测到这些值。 foreach不刷新。

1 个答案:

答案 0 :(得分:0)

您在data一词周围缺少引号。应该是Checkeditem['Checked'],而不是item.Checked

item[Checked]
ko.bindingHandlers.updateArray = {
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
       var value =  valueAccessor();
       var valueUnwrapped = ko.unwrap(value);
       $("#before").text(JSON.stringify(valueUnwrapped));
       console.log("true");
       valueUnwrapped.map(function(item){
           item['Checked']= true; return item; 
       });

       ko.utils.unwrapObservable(value(valueUnwrapped));
    }
}

var viewModel = function(){
  var self = this;
  self.DropdownValues = ko.observableArray([
    { id: 0, type: "Arc",Checked:false },
    { id: 1, type: "Eve",Checked:false },
    { id: 2, type: "Ca",Checked:false },
    { id: 3, type: "test",Checked:false },
  ]);
};

ko.applyBindings(new viewModel());