gpt4 book ai didi

backbone.js - Backbonejs事件发生多次

转载 作者:行者123 更新时间:2023-12-03 11:25:24 25 4
gpt4 key购买 nike

我有一个在网格中显示项目的 View 。如果单击创建新行的按钮,则会显示一个 pop 窗口(使用SimpleModal),以允许用户将行保存到服务器。如果一切顺利,则窗口将关闭并且网格将刷新。至此为止,所有工作正常。如果现在再次打开窗口,则保存记录事件将被调用两次。如果我第三次关闭并打开窗口,则该事件将被调用3次,依此类推。我不知道为什么该事件多次反弹。这是我的两种观点:

FieldList View :

var fieldListView = Backbone.View.extend({
el: "#centerbodycontent",
initialize: function () {
_.bindAll(this, 'render', 'addField');
},

render: function () {
$(this.el).empty();
$("#FieldGridTemplate").tmpl({ results: this.model }).appendTo(this.el)
stripe($(this.el).find("tbody"));
return this;
},
events: {
"click a#addfield": "addField"
},
addField: function (e) {
window.appController.popup = new fieldFormView({ model: new fieldModel({ contenttype_id: this.model.id }) });
window.appController.popup.render();
}

});

表单 View (这是 pop 窗口的名称)
var fieldFormView = Backbone.View.extend({
el: "#popupwindowcontent",

events: {
"click #savefieldandnew": "savefield",
"click #savefieldandclose": "savefield",
"change input,textarea,select": "changeField"
},
render: function () {
var formWrapper = $(this.el).find(".modal-form")[0];
$(formWrapper).empty();
$("#FieldFormTemplate").tmpl({ results: this.model }).appendTo(formWrapper)
OpenForm(this.el, "Add Field", 450, 600);
return this;
},
// automatically updates the model during field changes
changeField: function (e) {
var changeobj = new Object;
switch (e.target.type) {
case "radio":
changeobj[e.target.id] = parseInt($(e.target).val());
break;
case "checkbox":
changeobj[e.target.id] = $(e.target).is(":checked");
break;
default:
changeobj[e.target.id] = $(e.target).val();
break;
}

if (e.target.id.toLowerCase() == "name") {
var k = $(this.el).find("#key");
if (jQuery.trim(k.val()).length == 0)
k.val($(e.target).val().replace(/[^a-zA-Z0-9]+/g, '').toLowerCase());

var l = $(this.el).find("#label");
if (jQuery.trim(l.val()).length == 0)
l.val($(e.target).val());
}

var options = { silent: true };
this.model.set(changeobj, options);
},
savefield: function (e) {
var kcode = (e.which);
var thiz = this;
var m = this.model;
var nextaction = e.target.id;
alert(nextaction);
if (kcode == 0 || kcode == 1 || kcode == 32) {
e.preventDefault();
if ($("#contentfieldform").validate({
rules: {
name: { required: true },
label: { required: true },
key: { required: true }
}
}).form()) {
m.save(null, {
headers: { "If-Match": m.get("version") },
error: function (model, response) {
var errResp = JSON.parse(response.responseText);
popupException("Content Type Modification Error", errResp.errors[0].message);
},
success: function (model, response) {
window.appController.popup.model = new fieldModel;
$.pnotify({
pnotify_title: 'Field Saved',
pnotify_text: 'The field was saved successfully.'
});

if (nextaction == "savefieldandclose") {
$.modal.close();
}
}
});
}
}
}

最佳答案

由于没有人回答,我想我会添加一些更多信息,以防有人碰到这个问题。 http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/是解释正在发生的事情(并提供通用解决方案)的一个很好的资源。此外,最新版本的主干网还提供了一些新方法来允许从 View 中注销事件。

关于backbone.js - Backbonejs事件发生多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5454388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com