2016-11-04 41 views
0

我想跟踪任何自定义元素(或视图)的属性更改。因此,而不是更新每个视图,或创建超类,我试图使用插件并附加到propertyChanged观察员。这样我在虚拟机的环境中,我有一个参考,我有一个更改属性和新值的名称。我也想链接到一个视图(Element)。所以我的问题是 - 如果我有一台虚拟机,我该如何获得一个View?如何查看我是否参考了ViewModel?

为了更好地理解我也贴我的测试代码(我的插件):

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

您可以将元素注入到ViewModel中,从而为您提供视图。

例如:

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

这不是一个很好的答案,因为我说的“而不是更新每个视图,或创建超类,我试图使用插件”。注入元素是我必须为每个视图执行的操作。我需要在插件(和它的上下文)中连接视图和虚拟机 – user1440445

+0

你能解释更多吗?您需要在插件中使用哪个视图? – Benoit

+0

我想要什么注入元素返回,但我不能做注入,因为它必须是每个视图的一般。 – user1440445

相关问题