2016-07-28 2 views
1

Aureliaに類似関数$ applyまたは$ digestはありますか? 直ちに呼び出しがbindingValueをどのように変更しますか?

私の場合: 私はツリーを持っています(各ノードにはアイテムのリスト、画面1が含まれています)。私は親コンポーネント(名前:ツリー)とノードコンポーネント(名前:ノード)を持っています。 各ノードにはトグルボタンがあります。私のアイテムを切り替えるとき、親コンポーネントはコンテンツの高さの変化を知るべきです。

toggleNode(event) { 
    for (var i = 0, length = this.current.children.length; i < length; i++) { 
     this.current.children[i].visible = !this.current.children[i].visible; 
    } 
    //some code 
    this.evAggregator.publish("toggle-agents", event); 
} 

ビュー:

<ol show.bind="current.visible">//Some markup</ol>   

私の親コンポーネントキャッチこのイベントとコンテンツのサイズを確認します

@autoinject 
export class Agents { 
    constructor(private evAggregator: EventAggregator) { 
    this.toggleAgentsSubscriber = this.evAggregator.subscribe("toggle- agents", (e) => { 
     //some code for recalculate content height 
    }); 
    } 

を}

今のコードがそれを実行します。 1)this.current .children [i] .visible = false(ノードが崩壊したとき) 2)イベントを発生させる"toggle-agents" 3)サブスクライバが自分のイベントをキャッチ(高さを再計算) 4)Aurelia ObserverLocatorの深さで、DOMと高さが変更されました。

私が必要: 1)this.current.children [I] .visible =偽(場合、ノード崩壊) 2)深さアウレリアObserverLocatorでDOMと高さの変化で私(可視性)を更新します。 3)カスタムイベントを発生させます。 4)サブスクライバがイベントをキャッチし、高さの内容が実際に変更されたときに高さを再計算します。

答えて

2

アウレリアでは、ほとんどの場合、すぐに変更が適用されます。 Aureliaは、計算されたプロパティ(ゲッター関数を持つプロパティ)に対してのみダーティチェックを使用します。

import {DirtyChecker} from 'aurelia-binding'; 
import {inject} from 'aurelia-dependency-injection'; 

@inject(DirtyChecker) 
export class Foo { 
    constructor(dirtyChecker) { 
    dirtyChecker.check(); // force an application-wide dirty check 
    } 
} 

は実際には、この種のものは、アウレリアアプリで必要とされることはありません:あなたは手動で汚れチェックを起動したい場合は、このような何かを行うことができます。あなたは、あなたがsignal結合挙動を使用することができます更新を強制する特定のバインディングがある場合:

<template> 
    <label>${foo & signal:'my signal name'}</label> 
</template> 
import {BindingSignaler} from 'aurelia-templating-resources'; 
import {inject} from 'aurelia-dependency-injection'; 

@inject(BindingSignaler) 
export class Foo { 
    constructor(signaler) { 
    signaler.signal('my signal name'); // evaluate any bindings with 'my signal name' 
    } 
} 

をすることができます場合は離れてこれら二つの技術から滞在してみてください。これを時間ベースのバインディング(Date.now()またはnew Date()を使用するものへのバインド)または国際化ロケール変更イベント以外のものに使用している場合は、「Aureliaの方法」ではない可能性があります。

+0

私はシグナル技術を使用しようとしましたが、結果は得られません。たぶん私は間違ったことをしているのかもしれない私の場合の説明が追加されています。 –

関連する問題