0

バックボーンコレクション内のすべてのモデルをループして、変更されたモデルを保存するか、削除対象として選択されたモデルを破棄する2つの関数があります。成功とエラーを照合して、「X個の変更/削除が成功しました」および/または「X個のドメインの変更/保存中にエラーが発生しました」と通知できるようにする必要があります。

バックボーンコレクションを保存/破棄した経験はなく、モデルのみです。これを行う方法を示すものはインターネット上に見つかりません。

保存と削除は、親ビューのイベントによって呼び出されます。

関連するコード:

App.Views.SiteDomains = Backbone.View.extend({
    el: '.site-domains',
    initialize: function() {
        this.collection.on('all',this.render, this);
    },
    render: function() {
        $('.site-domains').empty();

    this.collection.each( function(model)
    {
        var view = new App.Views.SiteDomain({model: model});
        this.$('.site-domains').append(view.render().el);

        return this;
    });
},
saveDomainChanges: function() {

    this.collection.each( function(model)
    {
        var ref = model.get('ref');

        if ($('#' + ref).val() != model.get('domain')) {

            $('.save-domains').prop('disabled', true);

            var fields = $(this.el).find('form').serializeArray(), data = {};

            $.each(fields, function(i, pair)
            {
                data[pair.name] = pair.value;
            });

            model.save(data, {

                wait:true,
                success: function(model, response, event)
                {
                    // Pass each success to notification function
                },

                error: function(model, response, event)
                {
                    // Pass each error to notification function
                }
            });
        }
    });
    $('.save-domains').prop('disabled', false);
},
removeDomain: function() {
    this.collection.each( function(model)
    {
        var ref = model.get('ref');

        if ($('#remove-' + ref).prop('checked'))
        {
            model.destroy({
                wait:true,
                success:function() {
                    // Pass each success to notification function
                },
                error: function() {
                    // Pass each error to notification function
                }
            });
        }
    });
}
});

これを手伝ってくれる人に事前に感謝します!:)

4

1 に答える 1

2

アプリの設計に応じて、イベントアグリゲーターを使用して、通知用のモデル/ビューまたはPOJOを作成できます。このようなもの:

// Event aggregator
App.vent = _.extend({}, Backbone.Events);

// POJO for the notifications
App.notifications = {
    var onCreateSuccess = function (model, response) {
        ...
    };
    var onCreateError = function (model, response) {
        ...
    };
    App.vent.on('sitedomain:create:success', onCreateSuccess);
    App.vent.on('sitedomain:create:error', onCreateError);
};

// Add event triggering to corresponding callbacks
model.save(data, {
    wait:true,
    success: function(model, response, event) {
        App.vent.trigger('createdomain:create:success', model, response);
    },

    error: function(model, response, event) {
        App.vent.trigger('createdomain:create:error', model, response);
    }
});
于 2012-05-31T11:47:43.737 に答える