2013-07-26 95 views
-1

內的物體,我這裏這個視圖模型:myObsArr()[1].attrBknockoutjs修改observableArray

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任意值。

有沒有什麼辦法可以SET這些價值觀像myObsArr[1].attrB = false,沒有做任何removereplace

謝謝。

+0

是的,你可以設置的值:'myObsArr [1]()attrB = FALSE' ...什麼是不工作? – nemesv

+2

myObsArr()[1] .attrB = false; 你似乎忘記了()? – Adam

+1

@nemesv'myObsArr [1]()。attrB = false' does not work – dafriskymonkey

回答

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)); 
+0

感謝隊友,它是一個好主意,使任何項目observable,但它有點貴,我正在尋找一個更懶惰的解決方案:) 。任何方式我會用這個,希望ko 3.0會給這個問題帶來一些變化。 – dafriskymonkey

+0

@dafriskymonkey不用擔心。如果需要,替代你。 – Adam

相關問題