【发布时间】:2016-07-27 10:27:06
【问题描述】:
我有自定义选项卡功能,但在将 Aurelia 更新到 rc-1.0.x 后,列出来自 @children 装饰器的数据存在问题。
我的代码看起来像: 从'aurelia-framework'导入{inject, customElement, children};
@customElement('tabs')
@inject(Element)
@children({name:'tabs', selector: "tab"})
export class Tabs {
activeTab = undefined;
constructor(element) {
this.element = element;
}
attached() {
console.log(this.tabs); // Return undefined on promise resolve!!!
this.tabs.forEach(tab => {
if (tab.active) {
this.activeTab = tab;
}
tab.hide();
});
this.activeTab.show();
}
第一次加载时一切正常,this.tabs 是一个项目数组,正如预期的那样。
接下来,如果我执行服务器请求,则当 promise 解决时 this.tabs 控制台日志未定义。
如果我设置超时,它会解决问题,但这是正确的方法吗?
我还注意到在 html 中,执行了 repeat.for 语句,这给了我一个线索,即 this.tabs 在延迟之后收到附加函数被处理。
html:
<template>
<ul class="nav nav-tabs m-b-1">
<li repeat.for="tab of tabs">
<a href="#" click.trigger="$parent.onTabClick(tab)">
${tab.name & t}
</a>
</li>
</ul>
<slot></slot>
</template>
那么有没有一种方法可以使用 Aurelia 绑定或附加方法或更优雅的方法,而不是使用超时函数检查 this.tabs 的值?
【问题讨论】:
-
你的代码中的承诺在哪里解决?
-
标签是其他自定义元素的一部分。承诺在其他核心文件中解析,我们使用 bindingEngine 跟踪并更新该自定义元素的模型。
-
您介意使用 gist.run 快速重现您的问题吗?我已经为您创建了一个基本设置,从这里开始:gist.run/?id=cbf7a20cd866d4c2a56ddda80ab26764 只需添加所需的代码,单击“Fork to Public Gist”并将链接发布为评论。
-
恐怕我做不到。看我继承了其他开发者的代码,核心文件的逻辑很复杂,所以不太容易概括。我重新组织了选项卡的逻辑并使其在没有超时的情况下工作,但无论如何认为这是 Aurelia 问题。在触发绑定或附加时,@children 尚未解决。无论如何,感谢您的支持,并希望将来能解决这个问题。干杯!
标签: aurelia