![](/img/trans.png)
[英]Backbone.js: model.isNew() == true, but model.save() causes POST request instead of 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.