2015-04-15 8 views
0

Анализ данных, поступающих с серверов через метод parse, предоставляемый магистральной сетью.Backbonejs: настроить объект модели перед отправкой/синхронизацией на сервер

var the_model = Backbone.Model.extend({ 
    parse: function(response) { 
     return { 
      id: ApiWrapper.getId(response.resource_uri), 
      resourceUri: response.resource_uri, 
      categoryId: response.alert_type_id, 
      latitude: response.latitude, 
      longitude: response.longitude, 
      utm: MapCoordinates.latLongToUTM(response.latitude, response.longitude), 
      categoryName: response.alert_type_name, 
      ranger: { 
       fullName: response.ranger_id.first_name + ' ' + response.ranger_id.last_name 
      }, 
      icon: "/images/map-icons/map-alert-0" + response.alert_type_id + ".png", 
      dateTime: moment(response.time_stamp).format("dddd, MMMM Do YYYY, h:mm:ss a") 
     } 
    } 
}); 

var collection = Backbone.Collection.extend({ 
    model: the_model 
    parse: function(data_from_server) { 
     return data_from_server.results 
    } 
}) 

Для того, чтобы синхронизировать все вновь добавленные данные обратно на сервер - так как сервер не будет принимать разобранный формат магистральная сохраняется - как бы я идти этим? Практически не разбирайте данные или переформатируйте модель (модели), прежде чем синхронизироваться с сервером.

ответ

1

Чтобы контролировать, как ваша модель отправляет данные на сервер, переопределить Model.sync и установить атрибут attrs в вариантах:

var the_model = Backbone.Model.extend({ 
    parse: function(response) { 
     // ... 
    }, 

    sync: function(method, model, options) { 
     options = options || {}; 

     if ((method==='create') || (method==='update')) { 
      // prepare the data you want to send 
      var data = { 
       resource_uri: this.get('resourceUri'), 
       alert_type_id: this.get('categoryId') 
       // other attributes you want to add 
      }; 

      // pass that as an option to Backbone.sync 
      options.attrs = data; 
     } 

     return Backbone.Model.prototype.sync.call(this, method, model, options); 
    } 
}); 

и демо http://jsfiddle.net/nikoshr/z31k1qtp/

+0

'вернуть Backbone.Model.sync.call (это, метод, модель, опции); 'отлично работает без части« прототипа » – Knights