javascript — backbone.js model.fetch не отправляет данные в переполнение стека

Я только начинаю играть с backbone.js, чтобы узнать больше об этом для проекта, где я использую Javascript для клиентского кода PHP на стороне сервера.

Чтобы выяснить, как на самом деле работает связь между магистралью и сервером (не могу найти хорошую документацию по этому поводу. Я просто привел небольшой пример для fetch():

var NavigationElement = Backbone.Model.extend({
initialize: function() {},
defaults:   {
text: 'Home',
link: '/',
category: 'Main'
},
url: 'ajax.php'

});
var forum = new NavigationElement( { text: 'Forum',
link: '?q=Forum'});
var login = new NavigationElement( { text: 'Login',
link: '?q=Login',
category: 'User'});

forum.fetch();

Теперь, Backbone должен отправить некоторые GET данные на сервер для идентификации данных, которые он должен отправить. И действительно, $_SERVER[ 'REQUEST_METHOD' ] говорит, что есть GET-запрос, но $_GET остается пустым.

За save() У меня была похожая проблема, и я узнал, что могу найти данные в php://input для всех POST а также PUT Запросы. Есть ли подобный поток для GET Запросы?

И как я могу сказать Backbone отправить GET-запрос как '.../ajax.php?model=NavigationElement&text=Login' ?

1

Решение

По умолчанию, model.fetch будет использовать первый доступный в

  • атрибут URL, передаваемый в параметрах fetch
  • что установлено model.url
  • model.urlRoot с /id добавляется, если id атрибут существует
  • model.collection.url с /id добавляется, если id атрибут существует

Вы можете предоставить заказ url метод на NavigationElement установить другую конечную точку. Например:

var NavigationElement = Backbone.Model.extend({
initialize: function() {},
defaults: {
text: 'Home',
link: '/',
category: 'Main'
},
url: function() {
return 'ajax.php?model=NavigationElement&text='+encodeURIComponent(this.get('text'));
}
});

Демо: http://jsfiddle.net/nikoshr/ygdbxn1q/

или если вы просто хотите передать дополнительные параметры read операции, вы можете переопределить fetch и передать данные в качестве опции:

var NavigationElement = Backbone.Model.extend({
initialize: function() {},
defaults: {
text: 'Home',
link: '/',
category: 'Main'
},
url: 'ajax.php',
fetch: function(options) {
options = options || {};
options.data = _.extend({
model: 'NavigationElement'
}, this.pick('text'));
return Backbone.Model.prototype.fetch.call(this, options);
}
});

http://jsfiddle.net/nikoshr/ygdbxn1q/1/

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector