Синхронизация всей коллекции моделей в 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:

коллекция.синхронизация (метод, коллекция, [опции])

Использует Позвоночник.синхронизация для сохранения состояния коллекции на сервер. Может быть переопределен для пользовательского поведения.