编译为javascript时JS Interop的问题

时间:2013-05-10 07:43:37

标签: dart parse-platform

我正在使用Parse.com作为我的服务器解决方案。我正在我的dart.html标题部分加载他们的framework.js。

首先,一切(CRUD)在Dartium中运行良好。 现在我的目标是使其工作也编译为javascript。

我需要做的第一件事就是登录工作。用于初始化和登录的Parse JS如下:

Parse.initialize("appid", "appkey");

Parse.User.logIn("myname", "mypass", {
  success: function(user) {
    // Do stuff after successful login.
  },
  error: function(user, error) {
    // The login failed. Check error to see why.
  }
});

这是我在Dart的最新尝试。我没有使用缩小选项。

import 'dart:html';
import 'package:web_ui/web_ui.dart';
import 'package:js/js.dart' as js;

void main() {

  js.context.Parse.initialize("appid", "appkey");

  js.context.Parse.User.logIn("myname","mypass", js.map({
    "success": new js.Callback.once((user){
      print("success");
    }),
    "error": new js.Callback.once((user, error){
      print("error");
    }),
  }));
}

它在Dartium中运作良好并打印出“成功”。

当编译为javascript时,我在Safari中遇到此错误:JSON.stringify无法序列化循环结构。

Google Chrome控制台中的完整错误如下所示:

Uncaught TypeError:将循环结构转换为JSON js.dart:1043
$ .Proxy__forward js.dart:1043
$$。Proxy.noSuchMethod $ 1 js.dart:1033(匿名函数)
$ .main tabort.dart:21
$ .main0 tabort.html_bootstrap.dart:8
$$ ._ IsolateContext.eval $ 1 isolate_helper.dart:265
$ .startRootIsolate isolate_helper.dart:89(匿名函数)
tabort.html_bootstrap.dart.js:13949

帮助,或指向我正确的方向将非常感激!

编辑:下载最新的持续版本:0.1.2_r22610。 现在一切正常!

1 个答案:

答案 0 :(得分:2)

与此 JS 代码对应的 Dart 代码:

Parse.User.logIn("myname", "mypass", {
  success: function(user) {
    // Do stuff after successful login.
  },
  error: function(user, error) {
    // The login failed. Check error to see why.
  }
});

是:

js.context.Parse.User.logIn("myname", "mypass", js.map({
  'success': new js.Callback.once((user) {
    // Do stuff after successful login.
  }),
  'error': new js.Callback.once((user, error) {
    // The login failed. Check error to see why.
  })
}));

如果您将 Dart 代码编译为 JS ,请不要使用 - minify 选项,因为issue 9283

编辑:您的问题( JSON.stringify无法序列化循环结构)应该从r22598开始消失(参见https://groups.google.com/a/dartlang.org/d/msg/misc/zZ8Sx5rojis/UddCmmnaYTkJ