Синхронизация всей коллекции моделей в backbone.Яш
Я пытаюсь синхронизировать всю коллекцию моделей с сервером в магистрали.js. Я хочу опубликовать пакет JSON на сервере, содержащий все атрибуты модели коллекции. Это должно быть довольно просто, но я не уверен, что я делаю неправильно:
var RegisterCollection = Backbone.Collection.extend({
initialize: function () {_(this).bindAll('syncCollection');},
model: RegisterModel,
url: 'api/process.php',
updateModel: function(registerModel) {
var inputName = '#'+registerModel.get('inputName');
var userInput = $(inputName).val();
registerModel.set({value: userInput});
},
syncCollection: function(registerModel) {
this.sync();
}
});
var RegisterCollectionView = Backbone.View.extend({
el: "#register",
events: {
"click #submit" : "validate"
},
validate: function(e) {
e.preventDefault();
$("#register").valid();
if ($("#register").valid() === true) {
this.updateModels();
this.collection.syncCollection();
}
},
updateModels: function (){
this.collection.forEach(this.collection.updateModel, this);;
},
initialize: function(){
this.collection.on('reset', this.addAll, this);
},
addOne: function(registerModel){
var registerView = new RegisterView({model: registerModel});
this.$el.append(registerView.render().el);
},
addAll: function(){
this.$el.empty();
this.collection.forEach(this.addOne, this);
this.$el.append('<button type="submit" class="btn-primary btn" id="submit" style="display: block;">Submit</button>');
},
render: function(){
this.addAll();
return this;
}
});
var registerCollection = new RegisterCollection();
registerCollection.fetch();
var registerCollectionView = new RegisterCollectionView({collection: registerCollection});
registerCollectionView.render();
когда я пытаюсь вызвать syncCollection (), он возвращает следующую ошибку: Uncaught TypeError: Object [object Object] has no method 'save'
Я новичок в Backbone, поэтому есть вероятность, что я делаю довольно элементарную ошибку где-то...
2 ответов
хорошо, свежий кофе и через день, я получил его. Мы неправильно вызывали sync (). Вот что мы должны были сделать:--2-->
syncCollection: function() {
Backbone.sync('create', this);
}
спасибо machineghost за помощь в изучении этой проблемы - я был полностью сосредоточен на неправильной вещи.
причина, по которой вы получаете эту ошибку, заключается в том, что Backbone.Collection
не имеет метода Save (его модели). То, что я думаю, что вы ищете, это:
syncCollection: function() {
_(this.models).each(function(model) {
model.save();
}
}
или еще лучше, используя Collection
' s each
:
syncCollection: function() {
this.each(function(model) {
model.save();
}
}
или еще лучше, используя Collection
' s invoke
:
syncCollection: function() {
this.invoke('save');
}
однако, я не уверен, что вам даже нужно что-либо из этого, как Backbone.Collection
уже есть метод, который делает (я думаю), что вы хотите: sync
.
от позвоночника docs:
коллекция.синхронизация (метод, коллекция, [опции])
Использует Позвоночник.синхронизация для сохранения состояния коллекции на сервер. Может быть переопределен для пользовательского поведения.