2012-03-20 16 views
6

Czy jest możliwe modyfikowanie (dla braku lepszego terminu) schematu obiektu podczas procesu mapowania? Wyobrażam sobie, że tak jest, po prostu nie mogę tego zmusić do działania. Próbuję coś takiego:ko.mapping funkcja tworzenia, rozszerzanie obiektu

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

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

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

Odpowiedz

14

Oto przykład, który pokazuje w jaki sposób dostosowywania tablica jest tworzenie i definiowanie klucz do niej, tak aby można było zastosować aktualizacje za pomocą wtyczki mapowania: 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

W tym przykładzie mówisz, że kluczem są wszystkie dane? Myślałem, że musisz przekazać jakiś "element", aby to zrobić. To naprawdę imponujące rzeczy, nie wyobrażałem sobie układania tego w ten sposób. Potrzebują takiego przykładu na stronie lub powinieneś dodać go do KnockMeOut :). – farina

+0

Być może klucz staje się data.id? W debugowaniu mojego rozwiązania wygląda na to, że może tak być. – farina

+0

W tym przypadku funkcja 'key' zwraca' data.id'. To pomaga? –

Powiązane problemy