我想跟踪任何自定义元素(或视图)的属性更改。因此,我不是更新每个视图,也不是创建超类,而是尝试使用插件并附加到propertyChanged观察者。这种方式我在VM的上下文中,我有一个对它的引用,我有一个更改属性和新值的名称。我还想要一个视图的链接(元素)。所以我的问题是 - 如果我有VM,我该如何获得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;
}
奖金问题:这是非常适合猴子的补丁。是否有更好的方式来附加订阅者?
答案 0 :(得分:1)
您可以将Element注入ViewModel,为您提供视图。
例如:
@inject(Element)
export class MyClass {
constructor(element) {
this.element = element;
//do something with element;
}
}