dom 中的计算 属性 - 重复不起作用

Computed property in dom-repeat doesn't work

我尝试在 dom-repeat 帮助程序中使用计算 属性 但它在我单击按钮后立即抛出异常(请参阅下面的代码,包版本:sdk: 0.12.2polymer: 1.0.0-rc.5 , polymer_interop: 1.0.0-rc.4+1).可能出了什么问题?当我用 {{items}} 替换 {{computedItems}} 时,一切正常。

class Item extends JsProxy{
    @reflectable
    String a="aaa aaa";
    @reflectable
    String b="bbb bbb";
    Item(this.a, this.b);
}

@PolymerRegister('main-app')
class MainApp extends PolymerElement {

    @Property(computed:"getItems(items.*)")
    List<Item> computedItems;

    @property
    List<Item> items = [];

    @property
    String inp = '';

    MainApp.created() : super.created();


    @reflectable
    List<Item> getItems(_) {
        return items;
    }

    @reflectable
    void onTap(Event ev, Map details) {
        add("items", new Item(inp, 'aa'));
        set("inp", "");
    }

}

html文件:

<dom-module id="main-app">
    <template>

        <paper-input value="{{inp}}"> </paper-input>
        <paper-button raised on-tap="onTap">add to list</paper-button>

        <template is="dom-repeat" items="{{computedItems}}">
            <div style="color:red">
                <span>[[item.a]]</span>
                <span>[[item.b]]</span>
            </div>
        </template>

    </template>
</dom-module>

你可以这样做:

@PolymerRegister('app-element')
class AppElement extends PolymerElement {
  AppElement.created() : super.created();

  @property
  List<Item> computedItems;

  @property
  List<Item> items = [];

  @Observe('items.*')
  void computeItems([_, __]) {
    set('computedItems', items.toList());
    // .toList() creates a copy, otherwise Polymer wouldn't 
    // recognize it as a change

    // this works as well
    // set('computedItems', null);
    // set('computedItems', items);
  }

  @property int itemsChangeIndicator = 0;

  @property
  String inp = '';

  @reflectable
  List<Item> getItems(_) {
      return items;
  }

  @reflectable
  void tapHandler(dom.Event ev, Map details) {
    add("items", new Item(inp, 'aa'));
    set("inp", "");
  }
}

(我重命名为 onTap 因为这个命名方案很容易与元素中的事件流 getter 发生冲突,例如 onClick