我在所有对象的子属性上都有一个复杂的观察者,但它永远不会触发,我不明白为什么......
//Declaration's property
requirement: {
type:Object,
value: {
allLoaded: false,
tagsLoaded: false
}
},
//Complex observer
observers: [
'requirementChanged(requirement.*)'
],
//Observer definition
requirementChanged: function(val){
console.log('obs : ', this.requirement, val);//Just to see what's in there
},
//The action that should trigger the observer
if(res.length > 0)
{
this.sharedInfo.assetTags = res;
this.set('requirement.tagsLoaded', true);
this.notifyPath('requirement.tagsLoaded');
}
谢谢大家,祝你有愉快的一天
答案 0 :(得分:2)
您的财产声明的设置方式使其有效non-notifying
。
您必须在Polymer的属性声明上设置notify
来传播可观察到的变化触发器。
来自Polymer 1.x文档 -
notify - 通知属性支持向上数据流。默认情况下, 属性是非通知的,不支持向上数据流。
尝试将属性声明更改为 -
//Declaration's property
requirement: {
type:Object,
value: {
allLoaded: false,
tagsLoaded: false
},
notify: true
}
的进一步阅读
答案 1 :(得分:0)
我认为你错误地将你的财产初始化了。
将属性初始化为对象或数组值时,请使用函数确保每个元素都获得自己的值副本,而不是在元素的所有实例之间共享对象或数组。
以下是Polymer文档的链接,详细说明了它。
Configuring default property values
在你的例子中试试这个
<fo:block>
<xsl:if test="count(//CalcData[RunDesc='NormalCalc']/SpareParts/PartDtls/PartDtl)>0">
<xsl:for-each select="//CLASSXml/CalcData[RunDesc='NormalCalc']/SpareParts/PartDtls/PartDtl
[((Price/@Cur = 'HRK') or (Price/@Cur = 'EUR'))]">
<xsl:variable name="MyGId" select="GId"/>
<fo:block>
<xsl:if test="//CalcData[RunDesc='NormalCalc']/SpareParts/PartDtls/PartDtl/Price/@Cur = 'HRK' or //CalcData[RunDesc='NormalCalc']/SpareParts/PartDtls/PartDtl/Price/@Cur = 'EUR' or //CalcData[RunDesc='NormalCalc']/SpareParts/PartDtls/PartDtl/Price/@Cur = 'RSD'">
<xsl:value-of select="position()"/>
<xsl:value-of select="'. '"/>
<xsl:value-of select="PartDesc"/>
</xsl:if>
</fo:block>
</xsl:for-each>
</xsl:if>
</fo:block>
答案 2 :(得分:0)
你写的东西应该有效。在最糟糕的情况下,写下你的观察者:
observers: [
'requirementChanged(requirement.allLoaded, requirement.tagsLoaded)'
],