2017-07-31 25 views
1

最近,我遇到了以下问题:聚合物的性能不监听方法称为

在我的基于聚合物的项目,我有一个自定义元素,让我们称之为<test-element>。这个元素作为px-rangepicker作为依赖项,它基本上只是一个日期选择器。如果您从该选取器中选择一个日期,则会触发事件px-datetime-range-submitted。在我的test-element我有专门的监听器:

Polymer({ 
    is: 'test-element', 
    properties: { 
     test: { 
      type: String, 
      value: "foobar" 
     } 
    }, 
    listeners: { 
     'px-datetime-range-submitted': '_onDateRangeChanged' 
    }, 
    _onDateRangeChanged: function(changeEvent) { 
     console.log(this.test); 
    } 
}); 

现在,当我进入该网站,test-element加载的第一次,_onDateRangeChanged方法被调用。到目前为止,一切都很好。但是: 控制台仅适用于undefined。该方法内不能访问任何属性。奇怪的是:

console.log(Polymer.dom(this)); 

会给我一个完整的DomApi输出预期,我的财产作为一个节点:

▼ DomApi {node: test-element} 
    ▼ node:test-element.iron-selected 
    ► $: Object 
     test: "foobar" 

我不禁会发生些什么 - 任何帮助或信息非常感谢。

谢谢。

更新:

参见the code at GitHuba working example here(该px-datetime-range-submitted事件被称为5倍和控制台输出是undefined)。

+0

从代码的外观来看,错误必须在其他地方。请提供更多代码和/或小提琴来重现此行为。 –

+0

对于实际 - 我的'test-element'里面没有任何其他代码。我删除了除此之外的所有内容,但仍无法访问属性。如果我环绕 – sebastian

+0

这真的很奇怪 –

回答

1

嗨你举的例子问题不是你的代码或datepicker的代码。它只是聚合物的工作原理。
这是为什么发生?
px-rangepicker在其中实现了一个名为​​的行为,其中有一个观察者_notifyRangeChanged(range.*),该属性由范围属性的更改触发,同时此观察者触发px-datetime-range-submitted事件。这个属性有一个默认值,这意味着它的值在组件创建时被填充,并触发观察者。这似乎是在你自己的组件的属性被初始化之前完成的,然后它仍然是未定义的。但在此之后,当您打开选取器并选择另一个日期时再次触发,然后测试属性填充为foobar
为防止发生任何不良情况,请检查是否设置了测试的值。

_onDateRangeChanged: function(changeEvent) { 
    if(this.test !== undefined) { 
     console.log(this.test); 
    } 
} 
+0

这是正确的,但我不理解在这种情况下“静态”属性是如何定义的,甚至当我同时输出“Polymer.dom(this)”时 - 我的属性不是未定义的。 – sebastian

+0

Sry不能解释这一点。你有没有尝试用'this.get('test')读取变量'get应该是聚合物的一个普通函数。 –

+0

我做了同样的结果。它没有定义。 – sebastian