Polymer linkPaths 不会在更改时触发
Polymer linkPaths does not fire on-change et all
已编辑:现在有完整的代码
LinkPaths 有效,但不会触发数据更改的元素的所有更改事件。见图:
例如,当在 <paper-input label="Produto" value="{{item.descricao}}"></paper-input>
(外部 dom-重复)上更改数据时,元素 <paper-input label="Produto Componente" value="{{item_comp.descricao}}" on-change="mudou"></paper-input>
(内部 dom-重复)中的数据也会更改。由于链接路径,它工作得很好!
但是 on-change="mudou"
没有触发。
如果直接在 <paper-input label="Produto Componente" value="{{item_comp.descricao}}" on-change="mudou"></paper-input>
上输入数据则触发(内部 dom-重复)
main_app.html
<dom-module id="main-app">
<style>
:host {
display: block;
}
</style>
<template>
<h3>Lista de Produtos</h3>
<template is="dom-repeat" items="{{produtos}}" as="item">
<div class="layout vertical">
<paper-material elevation="1">
<div class="layout horizontal">
<paper-input label="Produto" value="{{item.descricao}}"></paper-input>
</div>
</paper-material>
<template is="dom-repeat" items="{{item.componentes}}" as="item_comp">
<div class="layout vertical">
<div class="layout horizontal">
<paper-input label="Produto Componente" value="{{item_comp.descricao}}" on-change="mudou"></paper-input>
</div>
</div>
</template>
</div>
</template>
</template>
</dom-module>
main_app.dart
import 'dart:html';
import 'package:polymer_elements/paper_input.dart';
import 'package:polymer_elements/paper_fab.dart';
import 'package:polymer_elements/iron_icons.dart';
import 'package:polymer_elements/paper_material.dart';
import 'package:polymer/polymer.dart';
import 'package:web_components/web_components.dart';
@PolymerRegister('main-app')
class MainApp extends PolymerElement {
@Property(notify: true)
List<Produto> produtos = new List();
MainApp.created() : super.created();
void ready() {
Produto p = new Produto()..descricao = 'componente 1';
add('produtos', p);
Produto p2 = new Produto()..descricao = 'componente 2';
add('produtos', p2);
Produto p3 = new Produto()..descricao = 'composto';
add('produtos', p3);
add('produtos.2.componentes', p);
add('produtos.2.componentes', p2);
linkPaths('produtos.2.componentes.0', 'produtos.#0');
linkPaths('produtos.2.componentes.1', 'produtos.#1');
linkPaths('produtos.0', 'produtos.#2.componentes.#0');
linkPaths('produtos.1', 'produtos.#2.componentes.#1');
}
@reflectable
void adicionarProduto(e, d) {
//...
}
@reflectable
mudou(e, d) {
window.alert('teste');
}
}
class Produto extends JsProxy {
@reflectable
String descricao;
@reflectable
List<Produto> componentes;
Produto() {
componentes = new List();
}
}
这在 Polymer 中正常吗?我怎样才能强制触发更改?
我找到了解决方法。
我使用了计算绑定方法,没有更多的 on-change
事件。在这种形式下,我在方法调用时传递了纸张输入值引用,并且每次该值发生变化时,都会调用该方法。
代码更改:
.html
...
<paper-input label="Produto Componente" value="{{item_comp.descricao}}"></paper-input>
<span>{{mudou(item_comp.descricao)}}</span>
...
.dart
...
@reflectable
void mudou(a) {
window.alert('teste');
}
...
已编辑:现在有完整的代码
LinkPaths 有效,但不会触发数据更改的元素的所有更改事件。见图:
例如,当在 <paper-input label="Produto" value="{{item.descricao}}"></paper-input>
(外部 dom-重复)上更改数据时,元素 <paper-input label="Produto Componente" value="{{item_comp.descricao}}" on-change="mudou"></paper-input>
(内部 dom-重复)中的数据也会更改。由于链接路径,它工作得很好!
但是 on-change="mudou"
没有触发。
如果直接在 <paper-input label="Produto Componente" value="{{item_comp.descricao}}" on-change="mudou"></paper-input>
上输入数据则触发(内部 dom-重复)
main_app.html
<dom-module id="main-app">
<style>
:host {
display: block;
}
</style>
<template>
<h3>Lista de Produtos</h3>
<template is="dom-repeat" items="{{produtos}}" as="item">
<div class="layout vertical">
<paper-material elevation="1">
<div class="layout horizontal">
<paper-input label="Produto" value="{{item.descricao}}"></paper-input>
</div>
</paper-material>
<template is="dom-repeat" items="{{item.componentes}}" as="item_comp">
<div class="layout vertical">
<div class="layout horizontal">
<paper-input label="Produto Componente" value="{{item_comp.descricao}}" on-change="mudou"></paper-input>
</div>
</div>
</template>
</div>
</template>
</template>
</dom-module>
main_app.dart
import 'dart:html';
import 'package:polymer_elements/paper_input.dart';
import 'package:polymer_elements/paper_fab.dart';
import 'package:polymer_elements/iron_icons.dart';
import 'package:polymer_elements/paper_material.dart';
import 'package:polymer/polymer.dart';
import 'package:web_components/web_components.dart';
@PolymerRegister('main-app')
class MainApp extends PolymerElement {
@Property(notify: true)
List<Produto> produtos = new List();
MainApp.created() : super.created();
void ready() {
Produto p = new Produto()..descricao = 'componente 1';
add('produtos', p);
Produto p2 = new Produto()..descricao = 'componente 2';
add('produtos', p2);
Produto p3 = new Produto()..descricao = 'composto';
add('produtos', p3);
add('produtos.2.componentes', p);
add('produtos.2.componentes', p2);
linkPaths('produtos.2.componentes.0', 'produtos.#0');
linkPaths('produtos.2.componentes.1', 'produtos.#1');
linkPaths('produtos.0', 'produtos.#2.componentes.#0');
linkPaths('produtos.1', 'produtos.#2.componentes.#1');
}
@reflectable
void adicionarProduto(e, d) {
//...
}
@reflectable
mudou(e, d) {
window.alert('teste');
}
}
class Produto extends JsProxy {
@reflectable
String descricao;
@reflectable
List<Produto> componentes;
Produto() {
componentes = new List();
}
}
这在 Polymer 中正常吗?我怎样才能强制触发更改?
我找到了解决方法。
我使用了计算绑定方法,没有更多的 on-change
事件。在这种形式下,我在方法调用时传递了纸张输入值引用,并且每次该值发生变化时,都会调用该方法。
代码更改:
.html
...
<paper-input label="Produto Componente" value="{{item_comp.descricao}}"></paper-input>
<span>{{mudou(item_comp.descricao)}}</span>
...
.dart
...
@reflectable
void mudou(a) {
window.alert('teste');
}
...