SteveSanderson / knockout.mapping

Object mapping plugin for KnockoutJS
Other
546 stars 767 forks source link

Knockout mapping.fromJS doesn't push to observableArray #115

Open marcofranssen opened 11 years ago

marcofranssen commented 11 years ago

I try to use the mapping plugin to update my viewModel with new values. However my observable array gets overwritten every request.

var mapping = {
     'events': {
         key: function (event) {
              return ko.utils.unwrapObservable(event.eventIdentifier);
          },
          create: function (options) {
               return new EventViewModel(auditLogViewModel, options.data);
          }
    }
};
ko.mapping.fromJS(data, mapping, auditLogViewModel);

so instead I use the following.

var mapping = {
     'ignore': ['events']
}
ko.mapping.fromJS(data, mapping, auditLogViewModel);
var newEvents = ko.utils.arrayMap(data.events, function (event) {
    //TODO: filter events already in auditLogViewModel.events() based on keys like mapping plugin does
    return new EventViewModel(auditLogViewModel, event);
});
auditLogViewModel.events.push.apply(auditLogViewModel.events, newEvents);
marcofranssen commented 11 years ago

My workarround solves also issue https://github.com/SteveSanderson/knockout.mapping/issues/110 because the following line.

auditLogViewModel.events.push.apply(auditLogViewModel.events, newEvents);

probably someone can solve both issues at once...