2014-01-09 90 views
0

我一直在閱讀本網站,最後有一個問題還沒有足夠滿足我的需求,所以在這裏。更新Knockout JS Observable Array中的元素

我有一個從C#應用程序中傳遞給我的KO視圖模型的數據數組創建的可觀察數組。

self.Stuff = ko.observableArray(data.Stuff); 

這個數組沒有可觀察的元素,存在我的問題。我需要通過onclick編輯一個元素(狀態)。我知道我需要使元素可觀察(不知道如何與data.Stuff部分)或做一個「valueHasMutated」,但我不完全知道該語法如何工作。

當然,我的push和remove工作正常,因爲它們觸發arrayobservable並刷新視圖。

if ($form.valid() && isValidStuff) { 
     self.Stuff.push({ ABC: self.ABCInput(), XYZ: self.XYZInput(), Status: self.StatusInput()}); 
     self.resetValues(); 
    } 

    self.removeStuff = function() { 
     self.Stuff.remove(this); 
    }; 

    self.StuffStatusChng= function(){ 
     //What to do? 
     self.Stuff.vauleHasMutated(); 
    }; 

任何幫助或推動正確的方向將是一個很大的幫助,謝謝!如果我沒有足夠的信息,請告訴我可以提供什麼。

謝謝,

回答

0

這對你有幫助嗎?

var OneStuff = function (data) { 
    this.ABC = ko.observable(data.ABC); 
    this.XYZ = ko.observable(data.XYZ); 
    this.Status = ko.observable(data.Status); 
}; 
self.Stuff = ko.observableArray(ko.utils.arrayMap(data.Stuff, function (oneStuffData) { 
    return new OneStuff(oneStuffData); 
})); 

這將使各個屬性可觀察。

要推:

self.Stuff.push(new OneStuff({ ABC: self.ABCInput(), XYZ: self.XYZInput(), Status: self.StatusInput()})); 
+0

這就是它,非常感謝! :) – Steve

1

如何使用敲除映射插件:

http://knockoutjs.com/documentation/plugins-mapping.html

它有一個fromJSON方法,該方法JSON字符串數組,並與觀察到的可觀察到的陣列物業爲每個屬性:

小提琴可以在這裏找到:http://jsfiddle.net/jiggle/uzn7Z/,注意一旦綁定,你可以n更新的第一個名字,它會更新屬性相應

HTML:

<div data-bind="foreach: people"> 
     <div> 
      <input type="text" data-bind="value:firstName"/> 
      <span data-bind="text: firstName"></span> 
      <span data-bind="text: lastName"></span> 
    </div> 

</div> 

代碼:

var stuff = '[{"firstName":"fred","lastName":"bloggs"},{"firstName":"david","lastName":"frost"}]'; 

console.log(stuff); 
var people = ko.mapping.fromJSON(stuff); 
console.log(people()); 
var viewModel ={}; 

viewModel.people=people; 

ko.applyBindings(viewModel); 

只需要下載和包括knockout.mapping.js。

相關問題