首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与dart有关的问题:编译为JS时的JS调用

与dart有关的问题:编译为JS时的JS调用
EN

Stack Overflow用户
提问于 2015-10-21 14:54:00
回答 1查看 648关注 0票数 3

在将代码编译到javascript dart2js之后,从dart:js获得上下文调用时,我遇到了一些严重问题。

下面是我为展示我的观点而编写的一个简单的程序,由两个文件组成:

main.dart

代码语言:javascript
复制
import 'dart:html';
import 'dart:js';

calledBack() async {
  querySelector('#output3').text = 'Called from JS';
}

void main() {
  querySelector('#output1').text = 'Started Dart';

  context['callMeFromJS'] = calledBack;

  context['app'].callMethod('callMeFromDart');
}

main.js

代码语言:javascript
复制
var App = function() {

};

App.prototype = {

    callMeFromDart: function(){
        var div = document.getElementById('output2');
        div.innerHTML = 'Called from Dart';
        callMeFromJS();
    }
};

var app = new App();

index.html

代码语言:javascript
复制
<!DOCTYPE html>

<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="scaffolded-by" content="https://github.com/google/stagehand">
    <title>untitled1</title>
    <link rel="stylesheet" href="styles.css">
    <script async src="main.dart" type="application/dart"></script>
    <script async src="packages/browser/dart.js"></script>
    <script src="main.js"></script>
</head>

<body>

  <div id="output1"></div>
  <div id="output2"></div>
  <div id="output3"></div>

</body>
</html>

当我尝试使用Dartium运行它时,它按预期工作。然而,如果我将它编译成JS并使用Chromium打开它,它将只工作大约50%的时间。在其他情况下,我会得到以下错误:

代码语言:javascript
复制
Uncaught TypeError: Cannot set property 'textContent' of 
nulldart.main @ html_dart2js.dart:40598dart._IsolateContext.eval$1 @ isolate_helper.dart:460dart.startRootIsolate @ isolate_helper.dart:122(anonymous function) @ main.dart.js:7141(anonymous function) @ main.dart.js:7142init.currentScript @ main.dart.js:7122(anonymous function) @ main.dart.js:7133(anonymous function) @ main.dart.js:7145

我还有一个更大的项目,其中也会发生类似的错误。这里的错误如下:

代码语言:javascript
复制
Uncaught Uncaught Error: NullError: method not found: 'constructor' on null
Stack Trace:
TypeError: Cannot read property 'constructor' of undefined
    at J.T (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:8103:23)
    at $Y (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:6053:3)
    at yS.a (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:1411:65)
    at yS.dart.yS.$1 (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:1794:22)
    at R8.dart.R8.FI (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:3082:42)
    at rq.dart.rq.$0 (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:2583:21)
    at dart.vs.static.HZ (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:2537:40)
    at vs.dart.vs.X2 (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:2474:3)
    at eX.dart.eX.$0 (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:2576:22)
    at OM.dart.OM.Ki (https://test-download-starsky.gamblify.com/web_game_builds/xmas/xmas_0.0.1-73-ga6a6de0/web/main.dart.js:2658:29)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-22 12:11:19

可能是时间问题。确保在执行Dart代码之前(也是在转换到JS时)加载JS。简单的解决方案是在Dart脚本标记之前移动JS脚本标记。

如果这还不够,可以添加一些同步。

在JS中创建一个公共变量并触发一个自定义事件。在Dart中,检查全局变量是否已设置(使用),如果尚未设置,请在继续之前侦听自定义事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33262615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档