壊れた英語で申し訳ありません。Dart言語は初めてです。JS と Dart の間で通信する方法を探しています。Dart から jQueryUI コードを呼び出したい。
jQueryUI のダイアログを作成すると、HTML と JS コードは次のようになります。
HTML コード:
...
<button id="btn1">OPEN</button>
<div id="msg">
Hello, world!
</div>
...
JS コード:
$('#btn').click( function() {
$('#msg').dialog('open');
});
$('#msg').dialog({
autoOpen: false,
buttons: {
"OK": function() {
$(this).dialog('close');
}
},
title: "Dialog",
modal: false,
show: 'fold',
hide: 'puff'
});
そこで、これらの JS コードを Dart コードに変換してみました。しかし、これらのテスト Dart コードを以下に記述すると、以下のエラー メッセージが表示されました。
Breaking on exception: Closure call with mismatched arguments: function 'call'
ダーツコード:
import 'dart:html';
import 'dart:js' as js;
void dartFunc() {
print("test");
}
void main() {
js.JsObject btn = js.context.callMethod(r'$', ['#btn']);
btn.callMethod('click', [dartFunc]); //-----> ERROR!
//...
}
しかし、以下のJS関数とDartコードを書いたところ、エラーが消え、プログラムは正常に実行されました。
JS コード:
function jsFunc() {
console.log("test");
}
ダーツコード:
import 'dart:html';
import 'dart:js' as js;
void dartFunc() {
print("test");
}
void main() {
js.JsObject btn = js.context.callMethod(r'$', ['#btn']);
btn.callMethod('click', [jsFunc]); -----> SUCCESS!
//...
}
この問題を見つけるために、いくつかのテストを実行しました。次のように、両方の関数 (jsFunc() と dartFunc()) を Dart からコンソールに出力すると、
ダーツコード:
...
js.context['dartFunc'] = dartFunc;
print(js.context['jsFunc']);
print(js.context['dartFunc']);
...
結果は以下のとおりです。
function jsFunc() {
console.log("test");
}
function () {
return func(Array.prototype.slice.apply(arguments));
}
どうやら の結果print(js.context['dartFunc'])
は奇妙です。
誰でも助けることができますか?Dart から有効な JavaScript の関数を定義することは可能ですか?
最後まで読んでくれてありがとう:)