Javascript 提线木偶js-如何制作咖啡脚本';在这个自定义区域I';我在建什么?
在本视频教程的22:30,作者用coffeescript做了一些我无法翻译成Javascript的事情。他使用粗箭头从内部回调中维护自定义区域的上下文。因此,他能够在对话框close回调中调用区域上的close?如何在Javascript中实现这一点 这是我的自定义区域尝试,但在调用此.closeDialog()时失败,因为“this”指的是对话框而不是区域:Javascript 提线木偶js-如何制作咖啡脚本';在这个自定义区域I';我在建什么?,javascript,coffeescript,jquery-ui-dialog,marionette,region,Javascript,Coffeescript,Jquery Ui Dialog,Marionette,Region,在本视频教程的22:30,作者用coffeescript做了一些我无法翻译成Javascript的事情。他使用粗箭头从内部回调中维护自定义区域的上下文。因此,他能够在对话框close回调中调用区域上的close?如何在Javascript中实现这一点 这是我的自定义区域尝试,但在调用此.closeDialog()时失败,因为“this”指的是对话框而不是区域: var DialogRegion = Backbone.Marionette.Region.extend({
var DialogRegion = Backbone.Marionette.Region.extend({
onShow: function (view) {
this.$el.dialog({
modal: true,
resizable: false,
draggable: false,
width: "600px",
close: function (e, ui) {
this.closeDialog()//This doesn't work. Wrong context. Need outer DialogRegion context?
}
})
},
closeDialog: function () {
this.close();
this.$el.dialog("destroy");
}
});
如果您可以假设一个相当现代的JavaScript,那么您可以使用:
bind()
方法创建一个新函数,该函数在调用时将其this关键字设置为提供的值[…]
看起来是这样的:
close: function (e, ui) {
this.closeDialog();
}.bind(this)
您使用的是木偶,所以您使用的是主干,这意味着下划线是可用的。这意味着,如果不想使用本机绑定
,可以使用:
close: _(function (e, ui) {
this.closeDialog();
}).bind(this)
您使用的是jQuery UI,因此也应该有可用的$.proxy
与\uu.bind
的作用相同,因此您可以使用它:
close: $.proxy(function(e, ui) {
this.closeDialog();
}, this)
“经典”选项是评论中提到的选项:
onShow: function (view) {
var _this = this;
this.$el.dialog({
//...
close: function (e, ui) {
_this.closeDialog()
}
});
}
这四个选项在功能上都相当于您在CoffeeScript视频中看到的
关闭:(e,ui)=>…
。请参见$。代理?关于上述方法,你有什么想法?编辑:请参阅。所以最好使用本机或下划线bind
@WilbertvandeRidder:对,我倾向于忘记$.proxy
,因为我通常有下划线可用。您也可以使用$.proxy
,但是var\u this=this
方法在jQuery世界中似乎更为常见。非常好。有很多选择。多谢。第一个也是最后一个工作。当我有机会在这里时,我也会验证另外两个。根据我在你提供的链接上读到的内容,它们应该是有效的。