2017-08-14 15 views
0

私はWijmoのwjFlexGridDetailディレクティブを使用していて、コンポーネントの "detailData"配列に一致するデータが含まれているかどうかに基づいてディテールグリッドを表示する行を制御します。 rowHasDetailプロパティは、外部グリッドの行を入力として使用し、ブール値を返す関数をとります。関数のスコープ内thisが、私は反対をチェックしようとしているデータが含まれていないwjFlexGridDetailオブジェクトに参照するため子ディレクティブへの任意のデータの受け渡し

<ng-template wjFlexGridDetail let-item="item" [rowHasDetail]="hasDetail"> 

hasDetail (row): boolean { 
    return this.detailData.filter(item => item.ID === row.dataItem.ID).length > 0 
} // detailData is undefined when I try this 

が、これは動作しません:私はこのような何かをしたいです。私は、データの属性として、それを結合しようとした:

<ng-template wjFlexGridDetail let-item="item" [rowHasDetail]="hasDetail" [attr.data-detail]="detailData"> 

が、エラーました:

Uncaught (in promise): Error: Template parse errors: Property binding data-detail not used by any directive on an embedded template. Make sure that the property name is spelled correctly and all directives are listed in the "@NgModule.declarations".

機能の範囲にそのデータを取得するための別の方法はありますか?または具体的には、wjFlexGridDetailの使用のために、私の目標を達成するための別の方法がありますか(詳細データを持つ行に対して+拡張ボタンを表示するだけです)?

答えて

0

私は解決策を見つけましたが、それは悪い角度のように感じますので、うまくいけばそこにまだ良い答えがあります。

bind関数は、関数のスコープに任意のデータを追加できます。関数を直接渡すのではなく、関数を呼び出して関数を呼び出し、それにデータをバインドします。 detailDataに関数のスコープを変更する

<ng-template wjFlexGridDetail let-item="item" [rowHasDetail]="hasDetail()"><!-- note the() --> 

hasDetail(): (row) => boolean { 
    return function (row): boolean { 
     return this && this.filter(item => item.ID === row.dataItem.ID).length > 0 
    }.bind(this.detailData) 
} 

は、比較を行うことを可能にするが、それは本当に物事の「正しい」方法のように感じることはありません。

関連する問題