如果我引用了ViewModel,如何获取View?

时间:2016-11-04 11:00:47

标签: aurelia

我想跟踪任何自定义元素(或视图)的属性更改。因此,我不是更新每个视图,也不是创建超类,而是尝试使用插件并附加到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;
}

奖金问题:这是非常适合猴子的补丁。是否有更好的方式来附加订阅者?

1 个答案:

答案 0 :(得分:1)

您可以将Element注入ViewModel,为您提供视图。

例如:

@inject(Element)
export class MyClass {
   constructor(element) {
      this.element = element;
      //do something with element;
   }
}