knockoutjs修改observableArray中的对象

时间:2013-07-26 19:49:24

标签: knockout.js

我在这里有这个视图模型:

var myObsArr = ko.observableArray();

var object1 = {attrA : 'hello', attrB : false};
var object2 = {attrA : 'world', attrB : true};

myObsArr.push(object1, object2);

var vm = {
    myObsArr : myObsArr
}
return vm;

我可以通过以下方式获取此observableArray中的任何值:myObsArr()[1].attrB

有没有办法我可以设置这些值,例如myObsArr[1].attrB = false,而不做任何removereplace ??

谢谢。

1 个答案:

答案 0 :(得分:0)

这是一个小提琴,我发现它有一个有趣的方法,看起来像你想要的那样。

http://jsfiddle.net/up8rB/

var items = [{
    Id: 1,
    Text: 'First item'
}, {
    Id: 2,
    Text: 'Second item'
}];

var observableItems = [
    new ItemViewModel(1, "First item"),
    new ItemViewModel(2, "Second item")
];

function ItemViewModel(id, text){
    var self = this;
    self.Id = ko.observable(id);
    self.Text = ko.observable(text);
}

var viewModel = function (items) {
    var self = this;
    self.items = ko.observableArray(items);
    self.selectedItemId = ko.observable();
    self.item = ko.observable();
    self.selectItem = function (item) {
        for (var i = 0; i < self.items().length; i++) {
            if (self.items()[i].Id() === self.selectedItemId()) {
                self.item(self.items()[i]);
                break;
            }
        }
    };
};

ko.applyBindings(new viewModel(observableItems));