2

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

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

和相应的飞镖文件:

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;
            });
        });
    }
}

一切正常primaryDatasomeOperation()它的属性被打印出来,并且对on的调用someClass正确地打印了它的数据。

问题出在嵌套模板中。显示下没有任何<template if="{{secondaryLoaded}}">内容。即使调用也someClass.someOperation()无法显示任何内容。

这里的范围有问题吗?看起来外部模板可以毫无问题地引用 dart 文件中定义的属性,但嵌套模板不能。

我通过在此处设置自定义绑定委托阅读了有关在模板中将变量设置为全局变量的信息。但是,我无法将自定义元素中的 bindingDelegate 设置为isTemplate返回 false。

有没有其他方法可以在自定义模板中设置全局变量?还是我对这一切都错了?

4

1 回答 1

1

这是一个错误。您可以对此问题加注星标以收到更改通知:

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

你现在唯一能做的就是把嵌套模板变成其他聚合物元素,或者想办法让模板不嵌套。

在你的情况下,而不是使用if="primaryLoaded"你可以只设置primaryData = null并且模板在设置之前不应该显示任何东西primaryData,假设primaryData@observable.

于 2013-10-21T17:37:43.877 回答