如何翻译下面的jQuery代码到DART? 我有困难得到警报回调使用js.interop工作。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
$(function () {
$('p').hide('slow', function() {
alert("The paragraph is now hidden");
});
});
</script>
任何帮助表示赞赏。
感谢您的问题! 我不知道我自己,但事实证明这是可能的。 :)
首先,添加js
给你pubspec.yaml:
name: jquerydart
description: A sample application
dependencies:
js: any
然后,运行安装酒吧 ,无论是通过命令行或通过飞镖编辑器。
然后,在你的飞镖文件:
import 'dart:html';
import 'package:js/js.dart' as js;
hideIsDone() {
window.alert('all done!');
}
void main() {
js.scoped(() {
js.context.jQuery('p').hide(1000, new js.Callback.once(() => hideIsDone()));
});
}
需要注意的是,从JS回调到飞镖,你需要创建一个回调对象。
另外请注意,你不能使用$
的jQuery的变量,dart2js也使用$
。 所以在此期间,你需要使用jQuery
在DART代码。
说了这么多,它很酷,我们可以通过JS-飞镖使用jQuery的互操作,但应该达特真正做到这对我们来说。 所以,我打开错误http://code.google.com/p/dart/issues/detail?id=6526
首先添加js
依赖于你的pubspec.yaml:
dependencies:
js: any
通过使用JS-互操作可以编写几乎相同的代码在JavaScript。
import 'dart:html';
import 'package:js/js.dart' as js;
void main() {
js.scoped(() {
js.context.$(new js.Callback.once(($) {
$('p').hide('slow', new js.Callback.once(() {
js.context.alert("The paragraph is now hidden");
}));
}));
});
}
主要的区别在于:
- 你必须使用
js.Callback.once
或js.Callback.many
设置你的回调函数。 使用js.Callback.once
如果您的回调调用一次。 - 您的代码必须与包裹
js.scoped
。 基本上, 管理代理寿命是在这里,以防止内存泄漏。
这就是说,你可以简化上面的代码:
import 'dart:html';
import 'package:js/js.dart' as js;
void main() {
js.scoped(() {
js.context.$('p').hide('slow', new js.Callback.once(() {
window.alert("The paragraph is now hidden");
}));
});
}
这些变化是:
-
js.context.$(new js.Callback.once(($) {
没有必要的,因为main
是等同于jQuery的$(function)
。 -
js.context.alert
已经通过更换window.alert
:这是更有效的直接使用DART的功能,而不是与JS通信。