2012-03-20 15 views
6

マッピング処理中にオブジェクトのスキーマを修正することは可能ですか?私はそれが、私はちょうどそれを働かせるように見えることができないと思います。あなたはマッピング・プラグインを使用して更新を適用できるように、ここでko.mapping create function、extend object

var data = { 
    itemOne: 'someData', 
    itemTwo: 'moreData' 
} 

var mapping = { 
    "newItem": { 
      create: function(options) { 
      return ko.observable(false); 
      } 
    } 
}; 

ko.mapping.fromJS(data, mapping, _model.observableArrayPart); 

答えて

14

は、あなたの配列はそれのためのキーを作成して定義する方法をカスタマイズするを示すサンプルです:http://jsfiddle.net/rniemeyer/LHeQZ/

var data = [ 
    { id: 1, first: "Bob", last: "Smith" }, 
    { id: 2, first: "Jim", last: "Jones" }, 
    { id: 3, first: "Delete", last: "Me" } 
]; 

var updatedData = [ 
    { id: 1, first: "Robert", last: "Smith" }, 
    { id: 2, first: "James", last: "Jones" }, 
    { id: 4, first: "New", last: "Guy" } 
]; 

var Person = function(data) { 
    this.id = data.id; 
    this.first = ko.observable(data.first); 
    this.last = ko.observable(data.last); 
    this.full = ko.computed(function() { 
     return this.first() + " " + this.last(); 
    }, this);   
}; 


var dataMappingOptions = { 
    key: function(data) { 
     return data.id;   
    }, 
    create: function(options) { 
     return new Person(options.data); 
    }   
}; 


var viewModel = { 
    people: ko.mapping.fromJS([]), 
    loadInitialData: function() { 
     ko.mapping.fromJS(data, dataMappingOptions, viewModel.people);   
    }, 
    loadUpdatedData: function() { 
     ko.mapping.fromJS(updatedData, dataMappingOptions, viewModel.people); 
    }   
}; 

ko.applyBindings(viewModel); 
私はこのような何かをしようとしています
+0

この例では、キーはすべてのデータであると言いますか?私はあなたがこれを行うためにいくつかの "項目"を渡さなければならないと思った。これは本当に印象的なものです、私はこのようなレイアウトを描いていませんでした。彼らはサイト上でこのような例が必要です、またはあなたはKnockMeOutに1を加えるべきです:)。 – farina

+0

キーがdata.idになることはありますか?私のソリューションのデバッグでは、そうかもしれないようです。 – farina

+0

この場合、 'key'関数は' data.id'を返します。それは役に立ちますか? –