在Dart中使用Jquery UI

在Dart中使用Jquery UI,jquery,dart,dart-polymer,Jquery,Dart,Dart Polymer,我试图在Dart中创建一个简单的对话框,我认为使用现有的javascript库更容易。 基本上,你可以找到基本的例子 $( "#dialog" ).dialog(); 在互联网和stackoverflow上,你可以找到1000个例子,但没有一个对我有用。 我想这是正确的方法: import 'dart:js' as js; //[...] var jquery = new js.JsObject(js.context['jQuery']); var myob = jquery('#dialog

我试图在Dart中创建一个简单的对话框,我认为使用现有的javascript库更容易。 基本上,你可以找到基本的例子

$( "#dialog" ).dialog();
在互联网和stackoverflow上,你可以找到1000个例子,但没有一个对我有用。 我想这是正确的方法:

import 'dart:js' as js;
//[...]
var jquery = new js.JsObject(js.context['jQuery']);
var myob = jquery('#dialog').dialog();
我得到的只是这个错误:

异常中断:类“JsObject”没有实例方法“call”

我是否误读了Dart的文档?

试试:

context.callMethod(r'$', ['#dialog'])
       .callMethod('dialog', []);    

基本上,有两个库可以与js:and进行互操作。dart:js是在package:js之后创建的,大多数stackoverflow答案都使用package:js,并且仍然有效(不值得对这些答案进行否决…)

package:js提供了一个更简单的Api,其代价是增加js的大小(因为package:js使用dart:mirrors和noSuchMethod)

使用包:js:

将'package:js/js.dart'导入为js;
main(){
js.context.$(“#dialog”).dialog();
}

使用dart:js:

将'dart:js'导入为js;
main(){
js.context.callMethod(r'$',['#dialog']).callMethod('dialog');
}

您只需在回拨时收到通知即可。有一个快速解决方案:

class CallbackFunction implements Function {
  final Function f;
  CallbackFunction(this.f);
  call() => throw new StateError('There should always been at least 1 parameter'
  '(js this).');
  noSuchMethod(Invocation invocation) {
    Function.apply(f, []);
  }
}

.callMethod("spinner", [new js.JsObject.jsify({
    "stop": new js.JsFunction.withThis(new CallbackFunction(recalc),
    "page": 1,
    "step": 0.1
    })])

void recalc(){
   print("recalcing");
}

您可以解析调用参数以读取javascript回调参数。来源:“package:js/js.dart”:第238行(可能会更改)

感谢您提供关于向下投票的附加说明。我想我可能已经否决了一些,因为我认为它们已经过时了。我可能会在下一次被困在浏览中时自己添加一个答案,以便获得答案。:)(我通常不会这样做,因为对旧问题的新答案没有太多曝光,很不幸)我尝试了第二个答案,它很有效,但我得到了一个警告:event.returnValue已弃用。请改用标准的event.preventDefault()。我不知道该在哪里使用。我认为这个警告来自对话框插件中的js代码。你的答案也是正确的。不幸的是,我不能将两者都标记为正确:(