Javascript “主干视图获取”;这";嵌套函数中的上下文
我有一个主干视图类,其render()方法调用showCal()方法(通过一个插件,例如fullcalendar) showCal()方法有一个选项散列,内部有几个函数。比如说Javascript “主干视图获取”;这";嵌套函数中的上下文,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我有一个主干视图类,其render()方法调用showCal()方法(通过一个插件,例如fullcalendar) showCal()方法有一个选项散列,内部有几个函数。比如说 showCal: function() { ... $('#somediv').fullCalendar({ }); 在上面的代码中,有另一个回调函数“eventDrop”,它显示qtip ... fullCalendar({ eventDrop: function() { $(someElement
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.
});
}
}
});
},
...
});
}
});
在上面的示例中(具有嵌套函数作用域的深层次),我正在为按钮单击编写一个事件处理程序。在这个事件处理程序中,我必须访问主干视图this对象,然后从该对象访问集合对象,并保存属于该集合的模型
两种直接方法是:
i) 将模型对象作为“数据”属性存储到qtip元素中,并在这个嵌套的fn中直接进行ajax调用。但这将违反MVC原则,并导致一个黑客代码。
ii)在此嵌套fn中引发一个自定义事件,并在视图级别直接处理该事件,此时该事件将可用
有没有其他(更好的)方法来解决这种情况 最简单的方法可能是在事件处理程序的开头保存上下文,例如
showCal:function(){var self=this;..
然后使用它。最简单的方法可能是在事件处理程序的开头保存上下文,例如showCal:function(){var self=this;..
然后使用它。