activate(model)
は、モデルがビューモデルにバインドされているときに一度呼び出されます。モデルの属性が変更されると、それらの変更は、モデルがコピーではなく参照であるため、合成されたビューモデルに反映されます。
たとえば、次のようにルートのターゲットとなるビュー/ビューモデルがあるとします(この例は、他のものも試していたので完全にクリーンな例ではありませんが、十分にはっきりしているはずです) :
ビュー:このビューでは、2つのセクションが<hr>
で区切られて作成されます。上部には各ビューのmodel.message
が表示されます。下部は、各ビューに対して<compose>
を作成します。
View Model:openViews
はグローバルスコープにあります。これは、ルートから離れてルートに戻ると、view.model
の変更が保持されるようにするためです。モデルがZenStudio
オブジェクトの場合、オブジェクトは破棄され、ルートが移動してこのビューに戻り、データが失われると再作成されます。次のように
var openViews = [
{ viewType: "", model: { message: "View 1"}},
{ viewType: "", model: { message: "View 2"}},
{ viewType: "", model: { message: "View 3"}}
];
export class ZenStudio {
constructor() {
}
created() {
}
get openViews() {
return openViews;
}
getViewFromType(view) {
// TOOD Load plugins and use the views defined by plugins
return "./views/editor-view";
}
}
エディタビュービューとビュー・モデルは、以下のとおりです。
<template>
<h1>${model.message}</h1>
<form>
<input type="text" value.bind="model.message">
</form>
</template>
ビューモデル:
export class EditorView {
constructor() {
}
created(owningView, thisView) {
this.view = thisView;
this.parentView = owningView;
}
activate(model) {
// Keep track of this model
this.model = model;
}
}
あなたはZenStudio
ビューが同じが表示されていることがわかりますEditorView
としてmodel.message
となります。ユーザーが<input>
内のメッセージの値を編集すると、値は対応する<compose>
ビュー内と同様に最上位ビューでも正しく変化します。
例はありませんが、openViews
リストに別の項目を追加すると、別のサブビューが追加され、トップレベルビューの別の行に新しいメッセージが表示されます。 repeat.for
は、リストに加えられた加算と減算を待ち受け、正しく合成された要素を作成/削除します。
あなたの質問にはうまくいきます。
私は例を書いていくつかのテストを行い、その変更は毎回反映されました。たぶんあなたはいくつかのコードとあなたのexcactユースケースを提供する必要がありますので、あなたにはより簡単です – kabaehr
これは既存のアプリケーションやコードのためのものではありません。問題はドキュメンテーションの目的でより高いレベルです。 Aureliaのバインディングシステム、何が観察されるか、いつ、どのように、フレームワークの未知のコンポーネントの1つです。 Aureliaのドキュメントは、このようなことをいつ説明するかほとんど分かりません。今私はユースケースを持っていないので、コードはありません。したがって、テストでオブジェクトのプロパティが変更された場合、その値は更新されましたか?おそらくそれは参照によって渡されていますか? –
この回答に記載されているように、push、popなどのメソッドで配列が更新されます。http://stackoverflow.com/questions/36394399/how-to-force-binding-re-evaluate-or-re-rendering-in -aurelia/36409924#36409924プロパティは、値が変更されると更新されます。ビューがアクティブになる前に 'activate'メソッドが一度呼び出されます –