在我构建的这个自定义区域中,coffeescript's的胖箭头是如何转换成Javascript的?
Marionette js - how does coffeescript's fat arrow translate to Javascript in this custom region I'm building?
在这个视频教程https://www.youtube.com/watch?v=hBVYDVy3QNI的22:30,作者用coffeescript做了一些我无法翻译成Javascript的东西。他使用一个大箭头从内部回调中维护自定义区域的上下文。这样,他就能从一个对话框内调用该区域的close回调吗?如何在Javascript中实现呢?
这是我的自定义区域尝试,但它在调用this. closedialog()时失败,因为"this"指的是对话框而不是区域:
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,那么你可以使用Function.prototype.bind
:
bind()
方法创建了一个新函数,当调用该函数时,将其this关键字设置为提供的值[…]
就像这样:
close: function (e, ui) {
this.closeDialog();
}.bind(this)
你在使用木偶,所以你在使用主干,这意味着下划线是可用的。这意味着如果您不想使用本机bind
,则可以使用_.bind
:
close: _(function (e, ui) {
this.closeDialog();
}).bind(this)
你正在使用jQuery-UI,所以你应该有$.proxy
可用。$.proxy
的用途与_.bind
相同,您可以这样使用它:
close: $.proxy(function(e, ui) {
this.closeDialog();
}, this)
"classic"选项是elclors在注释中提到的:
onShow: function (view) {
var _this = this;
this.$el.dialog({
//...
close: function (e, ui) {
_this.closeDialog()
}
});
}
这四个在功能上都等同于你在CoffeeScript视频中看到的close: (e, ui) => ...
。
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 将数字转换为一定数量的硬币
- 将纯文本URL转换为可单击链接
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 如何将TypeScript对象转换为普通对象
- 检测个位数整数时正在转换毫秒
- 从javascript到jquery的转换
- IE 供应商前缀/非前缀转换转换不起作用
- 单击事件侦听器不会启动转换/转换
- 如何在每次点击时用CSS转换/转换JS将对象旋转120度
- CSS3转换/转换
- d3转换转换不工作的DIV
- Javascript转换'转换为URL语言