在自定义Polymer / Typescript元素中使用自定义行为会引发Uncaught ReferenceError

时间:2017-01-20 11:29:01

标签: typescript polymer polymer-1.0

我尝试根据PolymerTS docs创建并使用自己的行为,但抛出Uncaught ReferenceErrorListViewBehavior未定义)。

这是我的行为(list-view/list-view-behavior.ts):

class ListViewBehavior extends polymer.Base {
  ...

这就是我使用它的方式(asset-list.ts):

/// <reference path="list-view/list-view-behavior.ts"/>
@component('asset-list')
@behavior(ListViewBehavior)
class AssetList extends polymer.Base implements {
  ...

如果我在同一个文件(asset-list.ts)中添加行为,则可以正常工作。

2 个答案:

答案 0 :(得分:1)

我刚试过你的代码。有趣的是,定义ListViewBehavior类而不导出它允许构建成功而不会发出警告或错误。当我尝试创建使用该行为的组件时,ReferenceError在运行时发生。

修复是将此导入添加到我的组件的类文件中:

import 'list-view/list-view-behavior';

在发生这种情况时会导致编译错误的清理程序修复是导出行为的类:

// In list-view/list-view-behavior.ts ...
export class ListViewBehavior extends polymer.Base {...}

并将其导入组件文件中:

// In asset-list.ts ...
import {ListViewBehavior} from 'list-view/list-view-behavior';

答案 1 :(得分:1)

为了完整起见,这里最终对我有用。 (当我有时间时,我会尝试polymer-typescript-starter-kit,因为我的解决方案不是很好。)

首先,我必须创建一个模块:

module CMSBehaviors {
   export class ListViewBehavior extends polymer.Base {
   ...
  }
}

然后,我可以直接使用它:

@behavior(CMSBehaviors.ListViewBehavior)

elements.html中,我添加了以下内容:

<script src="../bower_components/polymer-ts/polymer-ts.min.js"></script>
<script src="../services/cms-behaviors.js"></script>

需要polymer-ts.min.js,因为行为来自polymer.Base

相关问题