我有一个自定义元素,如下所示:
<polymer-element>
<template if="{{primaryLoaded}}">
<template repeat="{{pData in primaryData}}">
<p>{{pData.propertyOne}}</p>
<p>{{someClass.someOperation()}}</p>
<template if="{{secodaryLoaded}}">
<p>{{secondaryData.someProperty}}</p>
<p>{{someClass.someOperation()}}</p>
</template>
</template>
</template>
</polymer-element>
和相应的 Dart 文件:
class CustomElement extends PolymerElement with ObservableMixin
{
@observable bool primaryLoaded = false;
@observable bool secondaryLoaded = false;
@observable var primaryData;
@observable var secondaryData;
@observable var someClass;
void created()
{
primaryData = toObservable(new List<var>());
secondaryData = toObservable(new List<var>());
}
void inserted()
{
someClass = new SomeClass();
loadPrimaryData().then((pData) {
primaryData = pData;
primaryLoaded = true;
loadSecondaryData().then((sData) {
secondaryData = sData;
secondaryLoaded = true;
});
});
}
}
primaryData
一切正常.它的属性被打印出来并调用 someOperation()
在 someClass
正确打印其数据。问题出在嵌套模板中。
<template if="{{secondaryLoaded}}">
下没有任何内容被显示。甚至调用someClass.someOperation()
无法显示任何内容。这里的范围有问题吗?看起来外部模板可以毫无问题地引用 dart 文件中定义的属性,但嵌套模板不能。
我通过设置自定义绑定(bind)委托(delegate) here 阅读了有关在模板中将变量设置为全局变量的信息.但是,我无法将自定义元素中的 bindingDelegate 设置为
isTemplate
返回假。有没有其他方法可以在自定义模板中设置全局变量?还是我对这一切都错了?
最佳答案
这是一个错误。您可以对此问题加注星标以收到更改通知:
你现在唯一能做的就是把嵌套模板变成其他聚合物元素,或者想办法让模板不嵌套。
在你的情况下,而不是使用if="primaryLoaded"
你可以设置primaryData = null
并且模板在primaryData
之前不应显示任何内容已设置,假设primaryData
是@observable
.
关于dart - 在嵌套模板中无法访问聚合物自定义元素属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19498258/