从 Scala.js 访问 JS
Access JS this from Scala.js
我正在尝试将此代码从 js 库文档转换为 scala.s:
$('#myTable').on( 'click', 'tbody td', function () {
editor.inline( this, {
submitOnBlur: true
} );
} );
我试过的代码:
$("#table").on("click", ".editable", (thiz: js.Dynamic) => {
editor.inline(thiz, JC(
submitOnBlur = true
))
})
但它给我错误:
Cannot read property 'contents' of undefined at f.inline
你写的回调函数,即
(thiz: js.Dynamic) => {
editor.inline(thiz, JC(
submitOnBlur = true
))
}
是1个参数的函数(恰好被称为thiz
),而不是接收this
作为参数的函数。也就是说,相当于JS中的如下:
function(thiz) {
editor.inline(thiz, JC(...))
}
要访问 this
,您需要将回调函数强制为 js.ThisFunction
,如下所示:
((thiz: js.Dynamic) => {
editor.inline(thiz, JC(
submitOnBlur = true
))
}): js.ThisFunction
这将采用 Scala lambda 的第一个参数(在本例中是唯一的一个)并将其附加到 JavaScript 的 this
值,这就是您想要的。
我正在尝试将此代码从 js 库文档转换为 scala.s:
$('#myTable').on( 'click', 'tbody td', function () {
editor.inline( this, {
submitOnBlur: true
} );
} );
我试过的代码:
$("#table").on("click", ".editable", (thiz: js.Dynamic) => {
editor.inline(thiz, JC(
submitOnBlur = true
))
})
但它给我错误:
Cannot read property 'contents' of undefined at f.inline
你写的回调函数,即
(thiz: js.Dynamic) => {
editor.inline(thiz, JC(
submitOnBlur = true
))
}
是1个参数的函数(恰好被称为thiz
),而不是接收this
作为参数的函数。也就是说,相当于JS中的如下:
function(thiz) {
editor.inline(thiz, JC(...))
}
要访问 this
,您需要将回调函数强制为 js.ThisFunction
,如下所示:
((thiz: js.Dynamic) => {
editor.inline(thiz, JC(
submitOnBlur = true
))
}): js.ThisFunction
这将采用 Scala lambda 的第一个参数(在本例中是唯一的一个)并将其附加到 JavaScript 的 this
值,这就是您想要的。