Saya mencoba mengonversi kode ini dari js library docs menjadi scala.s:

$('#myTable').on( 'click', 'tbody td', function () {
    editor.inline( this, {
        submitOnBlur: true
    } );
} );

Kode yang saya coba:

$("#table").on("click", ".editable", (thiz: js.Dynamic) => {
  editor.inline(thiz, JC(
    submitOnBlur = true
  ))
})

Tapi itu memberi saya kesalahan:

Tidak dapat membaca 'isi' properti yang tidak ditentukan di f.inline

0
sergeda 12 November 2017, 10:43

1 menjawab

Jawaban Terbaik

Fungsi panggilan balik yang Anda tulis, yaitu,

(thiz: js.Dynamic) => {
  editor.inline(thiz, JC(
    submitOnBlur = true
  ))
}

Adalah fungsi dari 1 parameter (yang kebetulan disebut thiz), bukan fungsi yang menerima this sebagai parameter. Dengan kata lain, ini setara dengan yang berikut di JS:

function(thiz) {
  editor.inline(thiz, JC(...))
}

Untuk mendapatkan akses ke this, Anda perlu memaksa fungsi panggilan balik menjadi js.ThisFunction, sebagai berikut:

((thiz: js.Dynamic) => {
  editor.inline(thiz, JC(
    submitOnBlur = true
  ))
}): js.ThisFunction

Ini akan mengambil argumen pertama dari Scala lambda (dalam hal ini, satu-satunya) dan melampirkannya ke nilai this JavaScript, yang Anda inginkan.

1
sjrd 12 November 2017, 11:08