我正在使用Dart和它的JS互操作.我需要将以下JavaScript代码转换为Dart:
ID3.loadTags("filename.mp3", function() {
var tags = ID3.getAllTags("filename.mp3");
if (tags.artist)
artist.textContent = tags.artist;
if (tags.title)
track.textContent = tags.title;
}, {
dataReader: FileAPIReader(file)
});
Run Code Online (Sandbox Code Playgroud)
请注意匿名回调作为第二个参数loadTags.如何使用Dart和dart:js库创建它?
我得到的最接近的是创建一个命名函数:
js.context['loadTagsCallback'] = () {
var tags = ID3.callMethod('getAllTags', ["filename.mp3"]);
var artistTag = tags['artist'];
var titleTag = tags['title'];
if (artistTag != null) {
artist.text = artistTag;
}
if (titleTag != null) {
track.text = titleTag;
}
};
Run Code Online (Sandbox Code Playgroud)
然后使用这个Dart代码:
ID3.callMethod('loadTags', [
"filename.mp3",
js.context['loadTagsCallback'],
new js.JsObject.jsify({'dataReader': id3FileReader})
]);
Run Code Online (Sandbox Code Playgroud)
但是,我不想创建命名函数.任何想法或提示?
我担心编写一个需要与 D3 javascript 库互操作的 Dart 程序。需要从 javascript 访问大量数据,但我想将这些数据存储在 dart 中,我担心 Dart 和 Javascript 之间是否存在性能问题?
在每个dart文件的顶部编译的javascript是这个奇怪的列表.
function dart() {
this.x = 0;
delete this.x;
}
var A = new dart;
var B = new dart;
var C = new dart;
var D = new dart;
var E = new dart;
var F = new dart;
... etc etc ...
var Z = new dart;
Run Code Online (Sandbox Code Playgroud)
我扫描了其余的代码,寻找.A(或任何其他字母)没有运气.这究竟是为了什么目的?最终的结果是dart()函数/构造函数的AZ实例是空类对象,但有什么用?
像/[A-Z]{1}\./我一样使用正则表达式找到一些字母实例用属性装饰,然后所有27个字母都通过这个函数运行:
function convertToFastObject(properties) {
function MyClass() {
}
MyClass.prototype = properties;
new MyClass();
return properties;
}
;
A = convertToFastObject(A);
B = convertToFastObject(B);
C = convertToFastObject(C);
... etc …Run Code Online (Sandbox Code Playgroud) 我正在chrome.storage.local.set使用新js包和 dart 2 SDK编写一个自定义 dart 到 js 互操作。
MapDart 中的A与 JavaScript 中的对象不同,但强迫开发人员每次想要使用面向公众的 API 时都编写抽象类也不是正确的做法。
因此,我正在寻找一种将 dart Map 转换为不需要编写抽象类的 JavaScript 对象的方法。
使用dart:js它很容易将 dart Map 转换为 JS 对象,但是使用新js包我还没有看到任何将 dart Map 动态转换为 js 对象的示例。
我有一个 Flutter Web 项目。我有以下 HTML 脚本需要放入HtmlElementView:
<script src="https://www.paypal.com/sdk/js?client-id=YOUR_CLIENT_ID"></script>
<script>paypal.Buttons().render('body');</script>
Run Code Online (Sandbox Code Playgroud)
从这里。我试过这个:
Widget build(BuildContext context) {
// ignore: undefined_prefixed_name
ui.platformViewRegistry.registerViewFactory(
'paypal-button',
(int viewId) => IFrameElement()
..width = '500'
..height = '500'
..src = '''
<div id="paypal-button-container"></div>
<script src="https://paypal.com/sdk/js?client-id=MY_CLIENT_ID"></script>
<script>
paypal.Buttons({
// Set up the transaction
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '0.01'
}
}]
});
},
// Finalize the transaction
onApprove: function(data, actions) {
return actions.order.capture().then(function(details) {
// Show a success message to …Run Code Online (Sandbox Code Playgroud) 我在jquery中有一个函数,如下所示
function findMax(){
$( ".elements" ).each(function( ) {
if($(this).css('z-index')>max1)
max1=$(this).css('z-index');
max1=parseInt(max1);
});
}
Run Code Online (Sandbox Code Playgroud)
我必须在Dart语言中实现这个功能.在使用.each函数和'this'函数时遇到语法问题.
不,这与同名的其他问题不同.
有看似相同的包似乎这样做,但有不同的apis.
为什么有两个?
我们应该使用哪一个?
互操作看起来更新,并且有更好的api,但实际上并不起作用.根据文档,您应该能够转换此JavaScript:
var stage = new PIXI.Stage(0xFFFFFF);;
renderer = PIXI.autoDetectRenderer(800, 600);
document.body.appendChild(renderer.view);
Run Code Online (Sandbox Code Playgroud)
成:
var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
var renderer = js.context.PIXI.autoDetectRenderer(400, 400);
document.body.append(renderer.view);
Run Code Online (Sandbox Code Playgroud)
但是当你尝试编译它时会出现错误:
dart2js
Error occured:/Users/doug/megac/client/public/dart/index.dart:7:27:
Warning: No member named 'PIXI' in class 'Proxy'.
var pixi = new js.Proxy(js.context.PIXI.Stage, 0xffffff);
^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
那么... js:dart?这是你应该使用的吗?
编辑:顺便说一句,对于任何偶然发现这一点的人来说,还有一个开放的错误http://code.google.com/p/dart/issues/detail?id=15795&thanks=15795&ts=1388068177关于如何缩小dart-js互操作桥操作当前不起作用.最初的问题是在2013年5月报道的,从那时起就没有采取任何行动,所以不要屏住呼吸.
在Google Maps API v3中,他们声明我们需要在点击标记时打开infowindow:
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
Run Code Online (Sandbox Code Playgroud)
现在我试图使用js库在dart中复制它.到目前为止,我有这样的事情:
final google_maps = context['google']['maps'];
var myLatlng = [43.5, -6.5];
var center = new JsObject(google_maps['LatLng'], myLatlng);
var mapTypeId = google_maps['MapTypeId']['ROADMAP'];
var mapOptions = new JsObject.jsify({
"center": center,
"zoom": 8,
"mapTypeId": mapTypeId
});
var map = new JsObject(google_maps['Map'], [querySelector('#map-canvas'), mapOptions]);
var marker = new JsObject(google_maps['Marker'], [new JsObject.jsify({
'position': center,
'map': map,
'title': 'Hello World!'
})]);
var tooltip = '<div id="content">Info window coontent</div>';
var infowindow = new JsObject(google_maps['InfoWindow'], [new JsObject.jsify({
"content": tooltip …Run Code Online (Sandbox Code Playgroud)