嵌套模板中无法访问Polymer自定义元素属性

时间:2013-10-21 15:11:43

标签: dart dart-polymer

我有一个自定义元素,如下所示:

<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。

在自定义模板中是否还有其他设置全局变量的方法?或者我是不是错了?

1 个答案:

答案 0 :(得分:1)

这是一个错误。您可以将此问题加注星标以获得更改通知:

  
    

https://code.google.com/p/dart/issues/detail?id=12742

  

您现在唯一能做的就是将嵌套模板转换为其他聚合物元素,或找出一种方法,使模板不会嵌套。

在您的情况下,您可以设置if="primaryLoaded"而不是使用primaryData = null,并且在设置primaryData之前,模板不会显示任何内容,假设primaryData为{{1} }}。