0
任意のカスタム要素(またはビュー)の属性の変更を追跡したいと思います。だから、各ビューを更新するか、スーパークラスを作成するのではなく、プラグインを使用して、propertyChangedオブザーバにアタッチしようとしています。このように私はVMのコンテキストで、私はそれへの参照を持って、私は変更された属性と新しい値の名前があります。ビュー(要素)へのリンクも必要です。だから私の質問です - 私はどのようにビューを取得するVMを持っている場合は?ViewModelへの参照がある場合、Viewを取得する方法は?
は、より良い、私はまた私のテストコード(私のプラグイン)を貼り付け理解するために:
let originalCreateObserver = BindableProperty.prototype.createObserver;
BindableProperty.prototype.createObserver = function(viewModel)
{
let changeHandlerName = this.changeHandler;
let name = this.name;
let behaviorPropertyObserver: BehaviorPropertyObserver = originalCreateObserver.apply(this, arguments);
let originalSelfSubscriber = behaviorPropertyObserver['selfSubscriber'];
behaviorPropertyObserver['selfSubscriber'] = function()
{
console.log('attr changed', viewModel, name);
// QUESTION: Link to a View?
originalSelfSubscriber.apply(this, arguments);
}
return behaviorPropertyObserver;
}
ボーナス質問:これはかなりのサルのパッチ適用です。加入者に接続するためのより良い方法はありますか?
私は「代わりに各ビューを更新、またはスーパークラスを作成するので、私はプラグインを使用しようとしている」と述べたようので、これは、良い答えではありません。要素の注入は、すべてのビューで行う必要があります。私はプラグインでView with VM(とそのコンテキスト)を接続する必要があります – user1440445
あなたはもっと説明できますか?どのビューをプラグインで正確に使用する必要がありますか? – Benoit
私は注入された要素が返すものを正確に欲しがっていますが、注入を行うことはできません。なぜなら、それは各Viewに対して一般的でなければならないからです。 – user1440445