2015-07-22 3 views
0

Есть ли способ создать свой собственный метод ajax, чтобы сделать запрос POST вместо сохранения?Backbone.js пользовательский запрос модели

+0

Вы можете, но есть дебаты относительно того, является ли или не хороший подход. Для более подробного обсуждения просмотрите http://stackoverflow.com/questions/11331604/backbone-js-ajax-calls. – snozza

+0

Простым способом является использование '$ .ajax' с' type = post' вместо использования базовой модели. Зачем вам это делать в первую очередь? – AdityaParab

+0

Я уже нашел решение. Большое спасибо. – mmontes11

ответ

0

Сохранение не только вызывает запрос AJAX, но и вызывает события и проверку, поэтому я не буду писать свой собственный метод сохранения. Однако, вы всегда можете написать модель функции, как:

var SomeModel = Backbone.Model.extend({ 
    urlRoot: "/some/url", 
    altSave: function() { 
     $.post(this.urlRoot, { 
      /*assemble your post data*/ 
     }, function (response) { 

     }); 
    } 
}); 

var s = new SomeModel(); 
s.altSave(); 

вызывающему s.altSave(); будет срабатывать запрос POST.

0

Это правильно, и это работает, но я думаю, что это лучшее решение:

'use strict'; 

define([ 
    'underscore', 
    'backbone', 
    'config/appConfig' 
],function(_,Backbone,Config){ 

    var StatsModel = Backbone.Model.extend({ 
     urlRoot: Config.urlStats, 
     url: function() { 
      var url = this.urlRoot + "/resource"; 
      return url; 
     }, 
     defaults: { 
      metricID: '', 
      groupByID: '' 
     }, 
     requestStats: function(opts) { 
      var url = this.url(), 
       options = { 
        url: url, 
        type: 'POST', 
        contentType: 'application/json', 
        data: JSON.stringify(this.attributes) 
       }; 

      _.extend(options, opts); 

      return (this.sync || Backbone.sync).call(this, null, this, options); 
     } 
    }); 
    return StatsModel; 
}); 

Большое спасибо

+0

Нет, потому что: 1. он переопределяет значение по умолчанию 'url'' Backbone.Model', что необязательно, 2. Исходная реализация Backbone.sync может измениться, 3. вам нужно найти источник базы данных, чтобы узнать что происходит на самом деле происходит в 'return (this.sync || Backbone.sync) .call (this, null, this, options);'. Вы можете это знать сегодня, но через несколько месяцев вы его создадите, представьте, что произойдет с новыми разработчиками. Мое решение является более простым и понятным для разработчиков и не требует, чтобы вы врывались в источник библиотеки. Используйте это, если вы хотите написать код поддерживаемого кода. –

+0

Действительно, вы правы. – mmontes11