【发布时间】:2015-11-04 00:08:09
【问题描述】:
我在 dart lang 上从头开始新项目,遇到了聚合物元素实例调用方法的问题。
例如我有 fps-counter 元素(fpsCounter.dart):
@HtmlImport('fps_counter.html')
library fpsCounter;
import 'package:web_components/web_components.dart' show HtmlImport;
import "package:polymer/polymer.dart";
import "dart:html";
@CustomTag("fps-counter")
class FpsCounter extends PolymerElement
{
@observable
int fps;
// counter that will cleared at 60 ticks
int _counter = 0;
// accumulator delta time for 60 ticks
int _accumulator = 0;
factory FpsCounter() => new Element.tag('fps-counter');
FpsCounter.created() : super.created() {
polymerCreated();
}
bool calculateFps(double delta)
{
if (_counter == 60)
{
fps = (60000 / _accumulator).round();
_counter = 0;
_accumulator = 0;
print("$fps FPS");
return true;
}
_accumulator += delta;
_counter++;
return false;
}
}
并且想从外部调用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'.
我真的不想围绕它创建额外的沟通,任何想法如何使它更好或如何调用方法?谢谢。
还请查看可以提供帮助的其他文件:
pubspec.yaml
name: os
version: 0.0.1
dependencies:
browser: ">=0.10.0 <0.11.0"
ose:
path: ./libs/ose
polymer: any
transformers:
- polymer
fps-counter.html
<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>
【问题讨论】:
-
这通常是可行的。必须有一些错误阻止元素成为真正的
FpsCounter。您可以创建项目的公共 GitHub 存储库吗? -
你不需要在构造函数中调用
polymerCreated();,除非你的元素扩展了一个DOM元素(比如输入)。我预计这会导致问题。 -
谢谢,我将删除polymerCreated(),但问题没有解决。
-
请创建一个 GitHub 存储库,以便我能够正确调查。您的
pubspec.yaml是否在polymer转换器部分包含您的入口页面?我不知道您上面的pubspec.yaml是否被截断,因为您认为内容与问题无关,或者实际上是否没有任何进一步的内容。 -
我已经创建了临时仓库:github.com/AndyTyurin/os 感谢支持!
标签: dart polymer dart-polymer