2

壊れた英語で申し訳ありません。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 の関数を定義することは可能ですか?

最後まで読んでくれてありがとう:)

4

1 に答える 1