Polymer 1.X - 复杂的观察者没有射击

时间:2018-04-05 13:32:38

标签: javascript polymer observers

我在所有对象的子属性上都有一个复杂的观察者,但它永远不会触发,我不明白为什么......

//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');
}

谢谢大家,祝你有愉快的一天

3 个答案:

答案 0 :(得分:2)

您的财产声明的设置方式使其有效non-notifying
您必须在Polymer的属性声明上设置notify来传播可观察到的变化触发器。
来自Polymer 1.x文档 -

  

notify - 通知属性支持向上数据流。默认情况下,   属性是非通知的,不支持向上数据流。

尝试将属性声明更改为 -

//Declaration's property
requirement: {
    type:Object,
    value: {
        allLoaded: false,
        tagsLoaded: false
    },
    notify: true
}

以下是Observable and Unobservable changes

的进一步阅读

答案 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)'
],