2012-07-03 61 views

回答

0

您需要爲定義每個數據的自定義模型。例如:

function DataModel(opts) { 
    var self = this; 
    self.Id = ko.observable(); 
    self.DisplayName = ko.observable(); 
    self.ValueDisplayType = ko.observable(); 
    self.Value = ko.observable(); 
    for (var i in opts) 
     try{ self[i](opts[i]); } catch(e) {} 
} 

我已經添加了for所以你可以這樣做:當你創建

new DataModel({ 
    "Id": 12, 
    "DisplayName": "Rad Accept Time Out", 
    "ValueDisplayType": 0 
}); 

現在viewModel你可以這樣做:

var l = data1.length, parsed_data = []; 
for (var i = 0; i < l; i++) 
    parsed_data.push(new DataModel(data1[i])); 
self.models = ko.observableArray(parsed_data); 

在模板你可以用這個:

<script id="displayTmpl" type="text/html"> 
    <input type="text" data-bind="value: $data.Value" /> 
</script> 

終於在save方法:

self.save = function(){ 
    var newValues = ko.toJS(self.models); 
    console.log(newValue); 
} 

功能ko.toJS變換ko.observables到其值。如果您有newValues,那麼可以使用JSON將它們串聯起來,並將它們發送到服務器。

這或多或少是我會這樣做的。隨意在下面的評論中提出其他問題。

+0

非常好!非常感謝您的詳細解決方案!很棒的作品。我已經添加了另一個用於自動映射DataModel屬性的循環。 – SamSerious