Aureliaのカスタム要素を使用して、一連のエントリを繰り返しています。ここにサンプルの要点があります: https://Gist.run/?id=38aee854447122f021bc05e1e0de25ae
ここで、カスタム要素で定義されたボタンをクリックしたときにdeleteEntry(entry)
メソッドにアクセスする必要があります。 $parent.deleteEntry(entry)
を使用してみましたが、機能しません。
見た this 問題ですが、1年以上前のものであり、これを達成するためのよりクリーンな方法があるかどうか疑問に思っています。
これを実現するためにcall
バインディングを使用してみませんか?
例を次に示します: https://Gist.run?id=3cc553ea3bd7ed1862d87d8dbe4f5f84
app.html
<template>
<require from="./entry"></require>
<h2 class='text-center'>Journal Entries</h2>
<div>
<entry repeat.for='entry of entries' entry.bind='entry' delete-function.call="deleteEntry(entry)"></entry>
</div>
</template>
app.js
export class App {
entries = [{
'date': 'Jan 1',
'note': 'Hello World'
}, {
'date': 'Jan 2',
'note': 'Good Morning'
}];
deleteEntry(entry) {
console.log("Deleting entry");
console.log(entry);
const index = this.entries.indexOf(entry);
this.entries.splice(index, 1);
}
}
entry.html
<template>
<div>${entry.date} <button click.trigger='delete()'>X</button></div>
<div>${entry.note}</div>
</template>
entry.js
import {bindable} from 'aurelia-framework';
export class EntryCustomElement {
@bindable entry;
@bindable deleteFunction;
delete() {
this.deleteFunction();
}
}
明らかに、実際の実装では、deleteFunction
にバインドされているものが実際に関数であることを確認してから、呼び出す必要があります。
バインドライフサイクルイベントを使用すると、Aureliaで親ビューモーダルを取得できます。
bind(bindingContext, overrideContext) {
this.parent = bindingContext;
}
これで、親ビューからビューにすべての変数とメソッドにアクセスできます。
子ビューの以下のコードのように
this.parent.parentmethod();