所以,前言 - 我来自使用Angular。在Angular中,你倾向于使用很多承诺。显然,Polymer不会阻止您使用外部promise库,但它显然是围绕经典事件触发/回调构建的。所以,我基本上试图找到一种方法,只有在包装元素达到条件时才在元素中运行逻辑。
我有一个名为Secure-Page的元素。此元素可以操作外部会话对象以告知用户是否已登录,如果用户在到达时未登录,则会执行登录对话框功能。如果用户试图在不登录的情况下访问它们,那么这个元素就是为客户端的门页创建的。基本上它只是防止发送一堆失败的ajax请求......理论上。
在实践中,我找不到一种简单的方法来阻止包装元素加载/触发。我认为使用条件绑定模板会起作用,但无论模板是否呈现,似乎都会调用ready
,attached
等回调。
示例代码:
// in secure-page.html
<template if="{{session.UserId && session.token}}">
<content>
</content>
</template>
// in my-account.html
<ac-crud id="http"
session="{{session}}"
endpoint="http://localhost:3000/api/v1/users"
on-get-complete="{{updateData}}"
on-put-complete="{{handleSuccess}}"
></ac-crud>
....
<script>
Polymer('my-account', {
// even if I try any of the other callbacks all of them
// are called even if the element is not rendered
ready: function() {
this.$.http.get({ params: { id: this.session.UserId } });
}
...
我没有包含整个脚本文件,但我不认为其余的是相关的。
TLDR:我认为我需要一个类似于ready的回调,这是在元素的模板实际绑定时触发的。 (假设我认为所谓的条件绑定模板在满足条件之前实际上不会绑定,这是正确的)