簡體   English   中英

Backbone.js model.save()發送多個PUT請求

[英]Backbone.js model.save() sending multiple PUT requests

我有一個骨干視圖,可以加載模型和一些模板。 當我在編輯模板中提交表單時,骨干成功地發送了一個PUT請求,就像它應該的那樣。 成功后,我將用戶導航回視圖模板。

但是,如果我再次導航到編輯路徑並提交表單,則骨干網會發送兩個 PUT請求。 然后它獲取視圖模板。 如果我第三次導航到編輯路徑,則骨干網發送三個 PUT請求。 每次提交表單時,PUT請求的數量都會遞增。 為什么會這樣?

這是我的觀點:

// Filename views/users/edit.js
/*global define:false */

define([
    'jquery',
    'underscore',
    'backbone',
    'models/user/UserModel',
    'text!templates/users/edit.html',
], function($, _, Backbone, UserModel, UserTemplate) {

    var UserEdit = Backbone.View.extend({
        el: '#page',
        render: function (options) {

            var that = this;

            if (options.id) {
                // modify existing user
                var user = new UserModel({id: options.id});
                user.fetch({
                    success: function (user) {
                        var template = _.template(UserTemplate, {user: user});
                        that.$el.animate({opacity: 0}, 180, function() {
                            that.$el.html(template).animate({opacity: 1}, 180);
                        });
                    }
                });
            } else {
                // create new user
                var template = _.template(UserTemplate, {user: null});
                that.$el.animate({opacity: 0}, 180, function() {
                    that.$el.html(template).animate({opacity: 1}, 180);
                });
            }

        },
        events: {
            'submit #create-user-form': 'createUser'
        },
        createUser: function (e) {
            var postData = $(e.currentTarget).serializeObject();
            var user = new UserModel();
            user.save(postData, {
            success: function (user, response) {
                Backbone.history.navigate('#/users/view/' + response, {trigger: true, replace: true});
                }
            });
            return false;
        }
    });

    return UserEdit;

});

在我的情況下,我可以通過在成功回調中的視圖上調用undelegateEvents()來修復它。

createUser: function (e) {
    var postData = $(e.currentTarget).serializeObject(),
            user = new UserModel(),
            that = this;

    user.save(postData, {
        success: function (user, response) {
            that.undelegateEvents();
            Backbone.history.navigate('#/users/view/' + response, {trigger: true});
        }
    });

    return false;
}

謝謝,@ dbf。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM