2014-08-29 162 views
5

當在敲除映射中使用'create'選項時,我們將使數組成爲可觀察數組。 但是,我們如何讓可觀察數組中的每個對象的屬性都是可觀察的?如何使可觀察數組中的對象屬性可觀察?

在這個從knockout文檔中的例子中,children數組是一個可觀察數組,但我想讓每個對象字面值中的id,name等所有元素都成爲可觀察對象。我們如何實現這一目標。只需在創建塊中的每個新對象上放置一個ko.observable

var data = { 
    name: 'Graham', 
    children: [ 
     { id : 1, name : 'Lisa' } 
    ] 
}; 

// Your custom data model 
var myChildModel = function (data) { 
    this.id = data.id; 
    this.name = data.name; 
}; 

var mapping = { 
    'children': { 
     create: function(options) { 
      return new myChildModel(options.data); 
     } 
    } 
}; 

var viewModel = ko.mapping.fromJS(data, mapping); 

回答

1

documentation

  • 的對象的所有屬性被轉換爲可觀察到的。

因此,倒在節中有關使用「創造」它指出

當然,裏面的創建回調,你可以做另一個呼叫 ko.mapping.fromJS如果自定義對象的構造你希望。

提供的例子是如下:

var myChildModel = function(data) { 
    ko.mapping.fromJS(data, {}, this); 

    this.nameLength = ko.computed(function() { 
    return this.name().length; 
    }, this); 
} 

自然地,這將轉換所有的屬性。然後可以將更詳細的配置專門應用於該映射調用來處理自定義需求。

1

簡單的回答是使物體的觀察到

var myChildModel = function (data) { 
    this.id = ko.observable(data.id); 
    this.name = ko.observable(data.name); 
; 

屬性它也可能是最簡單的方法,儘管有其他人

0

簡單:

var viewModel = ko.mapping.fromJS(data); 

它做的一切,使兩個屬性和數組都可觀察。此方法的第二個參數僅用於定製目的。如果你不需要,你不必使用它!

相關問題