Polymerを使用してSPAを作成すると、私のバックエンドAPIを表す一般的なカスタムコンポーネントを使用するカスタムコンポーネントが必要となり、データの取得/送信が行われます。 API。また、「キャッシュ」として機能し、表示するデータを保持します。この方法では、この単一要素にアクセスできるすべてのコンポーネントが同じデータを共有します。 <my-api>
はなく、一度トップ1の私のすべてのコンポーネントの中で宣言してから受け継がれていないとして、プログラム的JavaScriptでのデータバインディングポリマーのHTMLElementプロパティ
<my-api
users="{{users}}"
products="{{products}}">
</my-api>
...しかし:
は、だから私は何をしたいのか...これでありますJavaScriptによる階層:
Polymer({
is: 'my-component',
properties: {
api: {
observer: '_onApiChanged',
type: HTMLElement
},
products: {
type: Array
},
users: {
type: Array
}
},
_onApiChanged: function(newVal, oldVal) {
if (oldVal)
oldVal.removeEventListener('users-changed', this._onDataChanged);
// Listen for data changes
newVal.addEventListener('users-changed', this._onDataChanged);
// Forward API object to children
this.$.child1.api = newVal;
this.$.child2.api = newVal;
...
},
_onDataChanged: function() {
this.users = this.api.users; // DOESN'T WORK as 'this' === <my-api>
this.products = this.api.products; // Plus I'd have to repeat for every array
}
});
Polymerはこれを行うための組み込みの方法を提供していますか? 二重中括弧バインディングをプログラムで作成できますか?
API要素を値の代わりに渡す必要があるのはなぜですか? – zacharytamas
@zacharytamas例えば、 'component1'は製品ではなくユーザを聴く必要があるが、サブコンポーネント' subcomponent1'のどちらかに両方が必要なので、 'component1'に' users'プロパティを宣言しなければならないとしましょうそれを 'subcomponent1'に渡すことができます。つまり、ほとんどのコンポーネントですべてのデータ配列を宣言しなければならないということです。新しいデータ型を追加するたびに非常に複雑になりますが、それは非常に冗長です。 – Flawyte