2015-09-30 7 views
8

現在、我々はAngularJSとPolymerの組み合わせを使用するプロジェクトに取り組んでいます。ポリマーは、メソッドによって計算されたプロパティの値をリフレッシュします

我々はいくつかの構造を持っていますが、本当に重要なのは、コードのこの部分である:

<template is="dom-bind" angupoly="{dataContainer:'dataContainer'}"> 
    <menu-list for="places" data="{{dataContainer.getSomeData()}}"> 
</template> 

私たちは、コントローラに設定されているデータコンテナの名前$の範囲に定義された変数を、持っています。

[DOM-バインド:: _ annotatedComputationEffect]:計算方法dataContainer.getSomeData()が定義されていない

そして、それはスロー - 問題は、コントローラは、そのプロパティを準備する前に、このコードが実行されるので、それは未定義だということですデータは決して再びリフレッシュされず、機能しません。逆に、プロパティでは(最初の状態が未定義であれば問題ありません)、リフレッシュされます。

私たちのアプリケーションでは本当に重要なポイントなので、質問したいと思います。必要な行動に到達するには?

ありがとうございました! :)

+0

これは本当に一方向バインディングです。次に、 'getSomeData()'の後にコード内の 'data'プロパティを設定する方法はありますか? –

+0

これは当てはまりますが、そのようにすれば、このような変数が膨大になります。そうすれば、コードを読みにくくすることができ、それは私たちが望むものではありません。その他の提案はありますか? –

答えて

3

私はポリマーに精通しておらず、ポリマーコードの実行を遅らせる可能性がある場合、またはダイジェストサイクルがある場合、AngularJSのように機能する可能性があります。

しかし、この種の競合状態を回避するには、ng-if=とAngularJS側の<ng-include>を組み合わせてください。DOMに要素を追加しないため、ポリマーとの相互作用を避けることができます含まれています。

だから、例えば:これはあなたを助けている場合

<template is="dom-bind" angupoly="{dataContainer:'dataContainer'}"> 
    <menu-list for="places" data="{{dataContainer.getSomeData()}}"> 
</template> 

は私が幸せになる - しかし、私が言ったように、それはただの推測です:

<figure ng-if="dataContainer.getSomeData"> 
    <ng-include src="'template.html'"> 
</figure> 

とtemplate.htmlあなたの(無修正)コード内

私はポリマーとそれがDOMとどのように相互作用するかについてよく知らない。

2

表示されているエラーは、dataContainerが定義されていないために発生したものではなく、呼び出された関数です。 Polymerは、データバインディングでこのタイプの関数呼び出しをサポートしていません。 docsから:

データバインディングそのローカルDOM(子またはターゲット要素)の要素のプロパティまたは属性にカスタム要素(ホスト要素)のプロパティまたはサブプロパティをバインドします。

あなたは機能しないプロパティで関数を呼び出しています。 関数を呼び出す場合は、computed bindingsでこれを行うことができます。

<menu-list for="places" data="{{getData(dataContainer.*)}}"> 

しかし、これはあなたのメニューリストは、いくつかの親ポリマー要素に入れて、私はあなたがdom-bindを使用すると、これはここにそうであるかどうかわからないんだけどされていることを前提としています。しかし、親要素を持っていれば、そこに計算された関数を追加することができます。

Polymer({ 
    is: 'parent-element', 
    properties: {dataContainer: ....}, 
    getData: function() { 
     return dataContainer.getSomeData(); 
    } 

}); 

getDataは、いつでもdataContainerまたはそのサブプロパティが変更されます。

関連する問題