我有一个自定义元素,如下所示:
<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文件中定义的属性而没有问题,但嵌套模板不能。
我通过设置自定义绑定委托here阅读了关于在模板中将变量设置为全局变量的内容。但是,我无法在我的自定义元素中设置bindingDelegate,因为isTemplate
返回false。
在自定义模板中是否还有其他设置全局变量的方法?或者我是不是错了?
答案 0 :(得分:1)
这是一个错误。您可以将此问题加注星标以获得更改通知:
您现在唯一能做的就是将嵌套模板转换为其他聚合物元素,或找出一种方法,使模板不会嵌套。
在您的情况下,您可以设置if="primaryLoaded"
而不是使用primaryData = null
,并且在设置primaryData
之前,模板不会显示任何内容,假设primaryData
为{{1} }}。