如在 backbone-todolist 示例中,我有一个元素的集合。 我创建了两个视图,一个用于列表,另一个用于每个元素。 它很好地工作着。
但是,由于我需要修改列表中的元素,在元素的视图中,我处理修改事件,并打开一个 colorbox 插件 弹出窗口,其包含一个 HTML 表单。HTML 是动态创建的并传递给 colorbox 元素。
我使用 colorbox 和 backbone-form 附加插件。
现在:弹出窗口不是我的视图中的子元素(在 DOM 中),因此我不知道如何在“提交”按钮操作上触发事件。
这是代码片段(省略了无用部分):
当弹出窗口打开时,saveEl方法(或函数?哪个术语更正确?)被触发。
我也尝试了代码的不同版本:
在第二种情况下,当视图被创建时调用saveEl函数(因此对于列表中的每个元素调用一次)。
我知道我可以为弹出窗口制作一个视图,但是有些东西告诉我它太复杂了,应该有更简单的架构。
问题实际上更普遍:是否可能处理由DOM对象触发的事件,而不在$(this.el)范围之外创建视图?
提前致谢。
-----------------更新:--------------
工作代码的最终版本如下:
但是,由于我需要修改列表中的元素,在元素的视图中,我处理修改事件,并打开一个 colorbox 插件 弹出窗口,其包含一个 HTML 表单。HTML 是动态创建的并传递给 colorbox 元素。
我使用 colorbox 和 backbone-form 附加插件。
现在:弹出窗口不是我的视图中的子元素(在 DOM 中),因此我不知道如何在“提交”按钮操作上触发事件。
这是代码片段(省略了无用部分):
// ** view of the single collection element
window.listElement = Backbone.View.extend({
tagName: 'li',
[...]
updateElement:function(){
//creates the update form in a popup menu
var form=new Backbone.Form({BLA BLA BLA...I TESTED IT, IT WORKS.
}).render();
$(form.el).append('<input id="update-btn" type="button" name="updateBtn" value="Update" style="display: block;">');
self=this;
//HERE COME THE TROUBLES
$.colorbox({
html:form.el,
[...] /SOME OTHER PARAMS
}).delegate('#update-btn','click',self.saveEl());
},
saveEl:function(){
console.log("now saving..")},
},
当弹出窗口打开时,saveEl方法(或函数?哪个术语更正确?)被触发。
我也尝试了代码的不同版本:
initialize: function(){//added this in the initialize function
_.bindAll(this, "saveEl");
$('#update-btn').bind('click', this.saveEl());
},
updateElement:function(){
//LIKE BEFORE BUT WITHOUT DELEGATE FUNCTION
$.colorbox({
html:form.el,
[...] /SOME OTHER PARAMS
});
},
saveEl:function(){
console.log("now saving..")},
},
在第二种情况下,当视图被创建时调用saveEl函数(因此对于列表中的每个元素调用一次)。
我知道我可以为弹出窗口制作一个视图,但是有些东西告诉我它太复杂了,应该有更简单的架构。
问题实际上更普遍:是否可能处理由DOM对象触发的事件,而不在$(this.el)范围之外创建视图?
提前致谢。
-----------------更新:--------------
工作代码的最终版本如下:
// ** view of the single collection element
window.listElement = Backbone.View.extend({
tagName: 'li',
[...]
updateElement:function(){
//creates the update form in a popup menu
var form=new Backbone.Form({BLA BLA BLA...I TESTED IT, IT WORKS.
}).render();
$(form.el).append('<input id="update-btn" type="button" name="updateBtn" value="Update" style="display: block;">');
$(form.el).delegate('#update-btn','click',this.saveEl())
$.colorbox({
html:form.el,
[...] /SOME OTHER PARAMS
});
},
saveEl:function(){
console.log("now saving..")},
}
});