私のアプリケーションでは、私はsomの冗長性と時間を節約するために私のビューモデルに注入できる多くの "サービス"を作りました。Aureliaカスタム要素の2ウェイデータバインド - カスタムビューを親ビューモデルにバインドする
私はそれをさらに進歩させて、これらのフォーム要素(選択、テキスト、チェックボックス - 選択したドロップダウン先)をカスタム要素に変換し、カスタム要素のみにサービスを注入しようとしています。
ある程度はうまくいきます。カスタム要素(この場合は選択)は、「親」ビューで必要なときに表示されますが、カスタム選択要素の選択値を変更すると、「親」ビューモデルにバインドされません。 。
カスタム要素の選択した値を、そのテンプレートのバインド属性を使用して「親」ビューモデルのプロパティにバインドできるようにしたいとします。
少しコードスニペットを数分で更新します。 (私は親のviewmodelと呼ぶもの)
create.js
import {bindable} from 'aurelia-framework';
export class Create{
heading = 'Create';
@bindable myCustomElementValue = 'initial value';
}
create.html(親ビュー)
<template>
<require from="shared/my-custom-element"></require>
<my-custom selectedValue.bind="myCustomElementValue"></my-custom>
<p>The output of ${myCustomElementValue} should ideally be shown and changed here, as the select dropdown changes</p>
</template>
私-custom.js
import { inject, bindable} from 'aurelia-framework';
import MyService from 'my-service';
@inject(MyService)
export class MyCustomCustomElement {
@bindable selectedValue;
constructor(myService) {
this.myService = myService ;
}
selectedValueChanged(value) {
alert(value);
this.selectedValue = value;
}
async attached() {
this.allSelectableValues = await this.myService.getAllValues();
}
}
何最初はcreate.htmlビューの出力は「初期値」で、カスタム要素selectの値を変更すると、新しく選択された値eは警告を出しますが、それはまだ "初期値"を表示しているバインドされた親変数を更新しません。
うわー感謝:クイックリファレンスをチェックするために最高の場所の
一つのドキュメントでオーレリアカンニングシートです多く。どのような素晴らしい答え。実際には、ヘビケースはサンプルコードの入力ミスですが、.tw-wayはすべて違いがありました! :Dあなたが好むもの、デコレーターかツーウェイかを聞いてもいいですか? – Dac0d3r
デフォルトバインディングモードは、他の人(またはあなた自身)が期待するものに設定する必要があります。この例ではデフォルトで双方向に設定していますが、これはコントロールの最も自然な使い方です。ほとんどの場合、 'selected-value'を双方向でバインドしたいと思います。これは、Aureliaが慣例を使用し、うまく機能する方法です。 – Charleh
+1とsnake-casingの言及に感謝します。私は例として1つの単語の変数だったので、ドキュメントに記載されていることを見ていない。拘束力を理解しようと狂ったことは、他のものと同じように行われたときにはうまくいかなかった。 – Danomite