Мне нужно переопределить backbone.sync, чтобы разрешить методы PUT - PullRequest
2 голосов
/ 29 марта 2012

Мне нужно переопределить Backbone.sync, чтобы разрешить PUT проблема в том, что я не знаю, как и где его поставить.

Это моя модель:

define([
'underscore',
'backbone'
], function(_, Backbone) {
var Input = Backbone.Model.extend({
url: 'http://localhost/InterprisePOS/SOP/mobilecreateinvoice/',
initialize: function(){

},
toJSON : function() {
  return _.clone({ input:this.attributes });
},

});
return Input;
});

Это моя функция сохранения на мой взгляд:

save: function(){
    invoice = new Invoice();
    input = new Input();
    invoice.set({POSWorkstationID: "POS7"});
    invoice.set({POSClerkID: "admin"});
    invoice.set({CustomerName: "Alice in Wonderland Tours"});
    invoice.set({IsFreightOverwrite: true});
    invoice.set({BillToCode: "CUST-000009"});
    InvoiceCollection.add( invoice );
    //var invoices = JSON.stringify({Invoices: InvoiceCollection.toJSON()});
    _.each(this.collection.models, function(cart){
        InvoiceDetailCollection.add( cart );
    });
    input.set({ "Invoices": InvoiceCollection.toJSON() });
    input.set({ "InvoiceDetails": InvoiceDetailCollection});
    alert( JSON.stringify(input.toJSON()) );
    input.save();
}

1 Ответ

7 голосов
/ 29 марта 2012

Стандартный обработчик синхронизации Backbone отображает CRUD в REST, как показано ниже:

  • create → POST / collection
  • read → GET / collection [/ id]
  • update → PUT / collection / id
  • delete → DELETE / collection / id

Иногда старые серверы эмулируют HTTP, имитируя метод HTTP с помощью _method и X-HTTP-Method-Overrideзаголовок.Если это так, вы должны установить Backbone.emulateHTTP в true

. Если вы хотите настраивать сопоставления, вам нужно переопределить Backbone.sync.Пример переопределения может быть следующим:

Backbone.sync = function(method, model, options, error) {

  // Backwards compatibility with Backbone <= 0.3.3
  if (typeof options == 'function') {
    options = {
      success: options,
      error: error
    };
  }

  var resp = function(resp) {
    if (resp.status) {
      options.success(method != 'read' ? model : resp.data);
    }
    else {
      options.error('Record not found ' + resp.data);
    }
  };


  var store = model.customStorage || model.collection.customStorage;

  switch (method) {
    case 'read':    model.id ? store.read({id: model.id}, resp) : store.readAll(resp); break;
    case 'create':  store.create(model.attributes, resp); break;
    case 'update':  store.update(model.attributes, resp); break;
    case 'delete':  store.delete(model.id, resp); break;
  }
};

Там, где customStorage - ваша реализация, это может быть все, что вы хотите, в соответствии с методами, которые я создал.Некоторое время назад я создал переопределение базовой синхронизации для хранилища HTML5 WebSQL, оно с открытым исходным кодом расположено на GitHub https://github.com/mohamedmansour/backbone.webStorage

Надеюсь, это поможет вам начать!Удачи!

...