Я работаю над простой системой бронирования с использованием BackBone с Laravel в качестве RESTful API.Как отобразить базовую коллекцию с помощью представления?
Я новичок в BackBone, поэтому вам просто нужно посоветовать, как вещи объединяются вместе.
Система потребует от пользователя выбрать дорожку, дату и тип события и указать, сколько мест осталось.
До сих пор мой (очень простой) магистральная приложение выглядит следующим образом:
Модель
CalEvent = Backbone.Model.extend({
idAttribute: 'ID',
defaults: {
ID: '',
EventID: '',
CircuitID: '',
StartTime: '',
EventFormatID: '',
TotalPlaces: '',
BookedPlaces: '',
ProvisionalPlaces: ''
},
url: '/tracker/booking'
});
Коллекция
var CalEvents = Backbone.Collection.extend({
model : CalEvent
});
var calEvents = new CalEvents;
var search_params = {
'CircuitID': 53,
'EventFormatID': 224,
'StartTime': '2014-11-04'
};
calEvents.fetch({
data: $.param(search_params),
success: function (cal) {
_.each(cal.models, function(model) {
console.log(model.toJSON());
})
},
error: function(model, xhr, options)
{
console.log(xhr);
}
});
До сих пор, так хорошо. Это соединяется с Laravel приложения передачи данных и возвращает объекты JSON для каждого из событий:
{ID: 18, EventID: 155957, CircuitID: 53, StartTime: "2014-11-04 17:15:00", EventFormatID: 224, RemainingPlaces: 18}
Что мне нужно в том, что, когда пользователь выбирает дату, дорожку и событие типа, эти данные будут собраны, прошел к приложению laravel и данным, представленным пользователю (в частности, RemainingPlaces).
Я пытаюсь понять, как View часть BackBone может «прослушивать» события (т.е. пользователь, выбирающий их параметры), вызывать коллекцию с данными, а затем визуализировать ее на экране.
Любая помощь будет принята с благодарностью
обновления
я создал следующий вид:
var CalView = Backbone.View.extend({
el : $(".booking"),
initialize: function(){
this.EventID = this.model.get('EventID');
console.log('thingy'+this.EventID);
},
events: {
'click' : 'clickHandler'
},
clickHandler:function(evt){
var search_params =
{
'CircuitID': 53,
'EventFormatID': 224,
'StartTime': '2014-11-05'
};
this.collection.fetch({
data: $.param(search_params),
success: function (cal) {
_.each(cal.models, function(model) {
//console.log(model.toJSON());
})
},
error: function(model, xhr, options)
{
//console.log(xhr);
}
});
this.render();
},
render:function(){
console.log('render');
_.each(this.collection.models, function (m, i, l) {
console.log('Booked Places: '+m.get('TotalPlaces'));
});
}
});
Поиск Params будет определяться на основе щелчка пользователей и передачи функции collection.fetch().
Это правильный способ сделать это ??
Одна проблема, которую я заметил, - это когда я нажимаю элемент, первые несколько раз результаты не возвращаются (без сообщения об ошибке). После 3 или 4 кликов результаты возвращаются и отображаются в консоли.
Заранее спасибо
Вы можете включить свой вид?Существуют разные способы прослушивания событий/триггеров в режимах Backbone. – Oakley
Спасибо за ответ. В настоящее время у меня нет представления. Я не уверен, где и как начать! Любые указатели были бы замечательными. – nvaughan84
Вот скрипка базовой модели и вида. Работая над переработкой, чтобы использовать коллекцию [http://jsfiddle.net/oakley349/ate0Lpos/8/](http://jsfiddle.net/oakley349/ate0Lpos/8/) – Oakley