Dart 如何从外部调用聚合元素实例的方法?

Dart 如何从外部调用聚合元素实例的方法?,dart,polymer,dart-polymer,Dart,Polymer,Dart Polymer,我在dart lang上从头开始了一个新项目,遇到了一个调用聚合元素实例方法的问题 例如,我有fps counter元素(fps counter.dart): 并希望从out调用calculateFps(0.016),如下例所示: void _initRenderer(OSE ose) { FpsCounter fpsCounter = new FpsCounter(); fpsCounter.calculateFps(0.016); document.body.chil

我在dart lang上从头开始了一个新项目,遇到了一个调用聚合元素实例方法的问题

例如,我有fps counter元素(fps counter.dart):

并希望从out调用
calculateFps(0.016)
,如下例所示:

void _initRenderer(OSE ose)
{
    FpsCounter fpsCounter = new FpsCounter();
    fpsCounter.calculateFps(0.016);
    document.body.children.add(fpsCounter);

}
但面临的问题是:

Exception: Uncaught Error: Class 'HtmlElement' has no instance method 'calculateFps'.
我真的不想围绕这一点创建额外的通信,有什么想法可以让它变得更好,或者如何调用这个方法?谢谢

另外,请查看其他有帮助的文件: 公共规范yaml

name: os
version: 0.0.1
dependencies:
  browser: ">=0.10.0 <0.11.0"
  ose:
    path: ./libs/ose
  polymer: any
transformers:
  - polymer
<link rel="import" href="packages/polymer/polymer.html" />
<polymer-element name="fps-counter">
    <template>
        <div>
            {{fps}} FPS
        </div>
    </template>
    <script type="application/dart" src="fpsCounter.dart"></script>
</polymer-element>
名称:操作系统
版本:0.0.1
依赖项:

浏览器:“>=0.10.0这看起来像是升级自定义元素失败了,可能是因为缺少导入。否则,
FpsCounter FpsCounter=new FpsCounter();
将返回一个真实的
FpsCounter
实例,调用
calculateFps(…)
将起作用

添加到您的
fps\u计数器的顶部。dart
文件:

@HtmlImport('fps_counter.html')
library some_library;
import 'package:web_components/web_components.dart' show HtmlImport;
您需要将条目页面添加到
pubspec.yaml
polymer
transformer部分

变压器:
-聚合物:
入境点:
-web/index.html
您需要导入包含类
FpsCounter
的dart文件,否则无法将
FpsCounter
用作类型批注或注释

您需要保留
fpsconter.created():super.created()
构造函数,如果不扩展DOM元素,就不要在其中调用
polymerCreated()

我还必须更改您的
main()
方法。您初始化Polymer的方式仅适用于
=1.0.0-rc.x
,但使用
any
时,您不会获得预发布版本,而是获得0.16.3+3。另请参见


现在它开始工作了

谢谢你的回答。我想还有另一个问题,我更新了问题顶部的代码并添加了其他文件以提供帮助。IDE中也有几个错误:1)[来自os | web/components/fps/fps_counter.html上HtmlFinalizer的警告]:web/components/fps/fps_counter.html的第1列第1行:(来自html)意外的开始标记(html)。预期DOCTYPE.2)[来自os | web/index.html上HtmlFinalizer的警告]:第316行,web/index.html的第19列:css文件lib/src/build/log|injector.css多次内联。这些错误应该已经修复(最近,不知道是哪个版本)。聚合元素不需要
css文件lib/src/build/log\u injector.css多次内联
只是一个可能优化的提示,可以在
pubspec.yaml
中用一个额外的行来修复,比如
聚合:内联样式表:log\u injector.css:false
log\u injector.css的问题解决了,谢谢!在我的dartium控制台的底部,我得到了:
不支持的操作:类缺少构造函数FpsCounter。创建了
哦,你让我高兴了一天。之后现在什么都没有。我想把元素放到渲染器管道中,每个帧调用渲染方法(requestAnimationFrame),还希望在更新之前为计算fps所需的元素设置delta param(渲染器将调用calculateFps方法,然后在dom上显示它).总的来说,这将是一个基于精灵的小游戏引擎,使用webgl的强大功能,这是我的小调查。非常感谢!这通常是有效的。一定有一些错误阻止元素成为真正的
FpsCounter
。你能创建项目的公共GitHub repo吗?你不需要调用
polymerCreated();
在构造函数中,除非您的元素扩展了DOM元素(如输入)。我认为这会导致问题。谢谢,我将删除polymerCreated(),但问题尚未解决。请创建一个GitHub回购协议,以便我能够进行适当调查。您的
pubspec.yaml
是否在
polymer
transformer部分包含您的条目页?我不知道您的
pubspec.yaml
是否被截断,因为您认为内容与问题无关,或者是否存在问题实际上没有任何进一步的内容。我已经创建了临时回购:谢谢支持!
@HtmlImport('fps_counter.html')
library some_library;
import 'package:web_components/web_components.dart' show HtmlImport;
import 'os.dart';
import 'package:polymer/polymer.dart';
export 'package:polymer/init.dart';

@whenPolymerReady
init() async {
  OS os = new OS();
  os.start();
}