Я только начинаю играть с 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' ?
По умолчанию, model.fetch
будет использовать первый доступный в
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);
}
});
Других решений пока нет …