2014-01-30 71 views
0

我要地圖JSON數組數據以下列方式來observablearray:敲除映射對象陣列可觀測到的陣列和創建計算屬性對象的foreach

var modell = function() { 


    self.activities = ko.observableArray(); 
    ... 


    ko.mapping.fromJS(dataJson, {}, self.activities); 
    // as a result I can use self.activities[0].FirstName or other properties 
} 

每個活動是複雜的對象。 爲簡單起見,我們可以假設每個活動內有兩個屬性 - FirstNameLastName。這很好,但是有可能寫 映射選項,它會爲每個活動創建可計算的可觀察的FullName

所以,我需要引用像self.activities [0] .FirstName,以及self.activities [0] .FullName,其中FirstName是簡單的可觀察,但FullName計算。

編輯: 這是一個嘗試的jsfiddle以下建議http://jsfiddle.net/5ScWn/ & & http://jsfiddle.net/8PK6F/,但它仍然無法正常工作。

回答

2

是的,可以使用映射選項爲可觀察數組中的每個項目創建計算的observable(s)。請嘗試以下操作:

 var mappingOptions = { 
      'activities': { 
       create: function (options) { 
        return (new (function() { 
         this.fullName = ko.computed(function() { 
          return this.firstName() + ' ' + this.lastName; 
         }, this); 

         ko.mapping.fromJS(options.data, {}, this); // continue the std mapping 
        })()); 
       } 
      } 
     }; 

,然後通過ko.mapping.fromJS(dataJson, mappingOptions, self.activities);

+0

我缺少的東西使用它,而是「活動」永遠都達到了?這可能是因爲dataJson沒有'活動'映射元素,但是是obects數組? – renathy

+0

這裏是我的小提琴你的例子:http://jsfiddle.net/5ScWn/或這個http://jsfiddle.net/8PK6F/,在這個例子中我有更復雜的用戶對象,它可以使問題? – renathy

+0

@renathy我更新了你發佈的第一個小提琴[here](http://jsfiddle.net/5ScWn/1/)。儘管我將計算出的'userFullName'從User'對象上移了一級。如果你想把它保存在'User'中,你必須添加addtl映射選項來爲'Activities'可觀察數組中的每個項目創建一個'User'可觀察值。 – rwisch45