gpt4 book ai didi

javascript - 通过 System.js 导入 ES6 代码后定义 Polymer 元素

转载 作者:行者123 更新时间:2023-11-29 15:29:05 24 4
gpt4 key购买 nike

我正在使用 Polymer 创建一个 HTML 元素,我希望它能够与我编写的 ES6 类一起使用。因此,我需要先导入类,然后再注册元素,这就是我所做的:

(function() {
System.import('/js/FoobarModel.js').then(function(m) {
window.FoobarModel = m.default;

window.FoobarItem = Polymer({
is: 'foobar-item',
properties: {
model: Object // instanceof FoobarModel === true
},
// ... methods using model and FoobarModel
});
});
})();

而且效果很好。但现在我想编写一个测试 HTML 页面来显示我的组件和一些虚拟数据:

<!DOCTYPE html>
<html lang="en">
<head>
<script src="/bower_components/webcomponentsjs/webcomponents.js"></script>
<script src="/bower_components/system.js/dist/system.js"></script>
<script>
System.config({
map:{
traceur: '/bower_components/traceur/traceur.min.js'
}
});
</script>
<link rel="import" href="/html/foobar-item.html">
</head>
<body>

<script>
(function() {
var data = window.data = [
{
city: {
name: 'Foobar City'
},
date: new Date('2012-02-25')
}
];
var view;

for (var i = 0; i < data.length; i++) {
view = new FoobarItem();

view.model = data[i];

document.body.appendChild(view);
}
})();
</script>
</body>
</html>

它不起作用的原因很简单:<script> 中的代码标记在 Polymer 注册元素之前执行。

因此我想知道是否有一种方法可以使用 System.js 加载 ES6 模块同步或者更好,如果可以监听元素注册的 JavaScript 事件(一些东西像 PolymerElementsRegistered )?

我已经尝试了以下但没有成功:

  • window.addEventListener('HTMLImportsLoaded', ...)
  • window.addEventListener('WebComponentsReady', ...)
  • HTMLImports.whenReady(...)

最佳答案

polymer starter kitapp/scripts/app.js 脚本中,他们使用 auto-binding templatedom-change 事件

// Grab a reference to our auto-binding template
var app = document.querySelector('#app');

// Listen for template bound event to know when bindings
// have resolved and content has been stamped to the page
app.addEventListener('dom-change', function() {
console.log('Our app is ready to rock!');
});

同时检查这个 thread提供 polymer-ready 事件的替代方案。

关于javascript - 通过 System.js 导入 ES6 代码后定义 Polymer 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36550206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com