Как и в примере с backbone-todolist, у меня есть набор элементов. Я сделал 2 представления, одно для списка и по одному для каждого элемента. Это прекрасно работает.
Однако, поскольку мне нужно, чтобы элементы списка были изменены, в представлении элемента я обрабатываю событие изменения, открывая всплывающее окно с плагин 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..")},
}
});