「挿入ファイル」カスタム要素を作成しようとしています。
こんな使い方もありそうですね
<template>
<require from='./insert-file'></require>
<section>
<insert-file fileName.bind="fn.fileName"></insert-file>
</section>
</template>
これはカスタム要素のビューです
<template>
<div innerhtml.bind="fileContent"></div>
</template>
そして、これは要素のビューモデルです
import {inject,bindable,customElement,ObserverLocator} from 'aurelia-framework';
import {HttpClient} from 'aurelia-http-client';
@customElement('insert-file')
@inject(HttpClient,ObserverLocator)
export class InsertFile {
@bindable fileName = '';
constructor(http,observerLocator) {
this.http = http;
this.fileContent = '...trying';
var subscription = observerLocator
.getObserver(this, 'fileName')
.subscribe(this.onFileNameChange.bind(this));
}
onFileNameChange(newValue, oldValue) {
function onSuccess(response) {
this.fileContent = 'success';
}
function onFailure(response) {
this.fileContent = 'failure';
}
this.http.get(newValue).then(onSuccess.bind(this), onFailure.bind(this));
}
}
fileName 属性が変更されたときに (私の使用例ではインタラクティブではなくプログラムによって) 通知し、適切なアクションを実行する、つまりファイルをロードしてその内容を DOM に挿入するという考え方です。
問題はそれです:
- 動作しません (エラー メッセージは表示されず、デバッガーではすべて問題ないように見えます)。
- 「this」の二重結合は複雑すぎるようです
私は何を間違っていますか?何か案は?
- - 編集 - -
簡単に説明しましょう。私はこれを行うことができますか?
<div innerhtml.bind="someVar"></div>
laterの値がsomeVar
変更された場合、ビューは更新されますか?