2013-03-07 52 views
1

我有一個js對象,看起來像下面淘汰賽映射如何添加和更新

{Messages: [ 
    {Content: "some content", 
    Id: "203", 
    IsNew: false, 
    Subject: "some Subject"}, 
    .... 
]} 

我想爲「是否新款」可觀察到的最起碼。要做到這一點我用的是ko.mapping插件

//Within success of ajax call 
var vm = ko.mapping.fromJS(data) 

但我也有一個需要我的虛擬機中的「SelecetedMessage」觀察到的和的setSelected功能。但我不知道這些成爲我的一部分的最佳方式。

有人可以解釋一下,我可能會在vm中包含這些屬性,當我用更新的消息列表更新vm時,如何保持這些屬性不變?

+1

有你看着knockoutjs教程? http://learn.knockoutjs.com/ – kzhen 2013-03-07 22:13:25

回答

2

這聽起來像你需要建立一個viewModel映射,以擴展屬性添加到您的消息。它應該是這個樣子:

var Message = function(data) { 
    var self = this; 
    ko.mapping.fromJS(data, { }, self); 
    self.isNew = ko.observable(false); 
    // Add more message-specific observables or functions you need here 
}; 

var viewModelMapping = { 
    'Messages': { 
    create: function(options) { 
      return new Message(options.data); 
     } 
    }; 

var ViewModel = function(data) { 
    var self = this; 
    // Add more view model-specific observables or functions you need here 

    ko.mapping.fromJS(data,viewModelMapping,self); 
} 

$(document).ready(function() { 
    vm = new ViewModel(initialViewModelData); 
    ko.applyBindings(vm); 
}); 


可以使用使用「更新」,「創建」和自定義對象的更新更多的自定義對象的構造部分here