我有一个骨干视图类,其render()方法调用showCal()方法(通过插件,例如fullcalendar)。
showCal()方法有一个选项哈希,内部有几个函数。例如
showCal: function() {
...
$('#somediv').fullCalendar({
});
在上面的代码中,还有另一个回调函数" eventDrop",它显示了qtip。
...
fullCalendar({
eventDrop: function() {
$(someElement).qtip({
));
}
});
qtip本身有许多带有事件处理函数的html UI元素。所以嵌套作用域的完整层次看起来有点像......
var MyView = Backbone.View.extend({
...
render: function() {
this.showCal();
},
...
showCal: function() {
...
$(element).fullCalendar({
...
eventDrop: function() {
$(someElement).qtip({
...
events: {
render: function() {
$(button).on('click', function(e) {
... code to handle the event.
});
}
}
});
},
...
});
}
});
在上面的示例中(具有深层次的嵌套函数作用域),我正在为按钮单击编写一个事件处理程序。在此事件处理程序中,我必须访问主干视图此对象,并从该此对象访问集合对象并对属于此集合的模型执行保存
一些直接的方法是: i)将模型对象存储到qtip元素中作为"数据"属性,并直接在这个嵌套的fn中进行ajax调用。但这会违反MVC原则,并导致一个hackish代码。 ii)在这个嵌套的fn中引发一个自定义事件,并直接在视图级别处理它, this 将可用。
还有其他[更好]的方法来应对这种情况吗?