当它从dom-repeat函数设置时,属性变化没有反映在UI中 - Polymer

时间:2016-12-16 12:35:21

标签: polymer polymer-1.0 polymer-1.x dom-repeat

我有对象数组和属性,我的dom-repeat结构如下所示

     <template is="dom-repeat" items="{{arrayOfObj}}">              //first dom repeat      
       <span>[[myProperty]]<span> //here also its not updating      
        <template is="dom-if" if="[[_checkSomeCondition()]]">    //calling method from dom-if
          <span>[[myProperty]]<span>     //here its not getting updated value
        </template>
     </template>

我有一个属性

 properties:{
 myProperty:{
  type:Boolean
 }
}
每当dom-repeat迭代

时,都会调用我的函数
 _checkSomeCondition:function() {  //I'll check and set property
  if(some condition){
     this.myProperty = true;
     return true;
   }
   else{
     this.myProperty = false;
     return true;
   }
 console.log(this.myProperty); //I'll get the updated value on console
}

但它在屏幕上没有变化!!它将在_checkSomeCondition中显示它首次设置的任何数据!但在控制台中更新

为了测试我插入了一个按钮,然后在点击该按钮后渲染所有dom-repeat后我调用了一些函数,当我改变了值时它会反映到各处

    this.myProperty = true;

但是为什么在dom-repeat调用的函数内改变值时它不起作用?我尝试了所有3种更新对象的方法

Plunker:https://plnkr.co/edit/iAStve97dTTD9cv6iygX?p=preview

3 个答案:

答案 0 :(得分:1)

通过this.myValue ='somevalue'设置变量;不会更新绑定。

最好通过this.set('variablename', 'variablevalue');

设置变量

您也可以在通过this.variablename = 'variablevalue'; this.notifyPath('variablename')设置属性之后;

答案 1 :(得分:0)

尝试

<template is="dom-if" if="[[_checkSomeCondition(myProperty)]]">    //calling method from dom-if
    <span>[[myProperty]]<span>   //here its not getting updated value
</template>

然后

_checkSomeCondition: function(property) {

答案 2 :(得分:0)

我修改了你的代码,如下所示。我不确定它对你的senario是否有帮助。请看看可能有助于提出想法

<template is="dom-repeat" items="{{sensor.Sensor.Contaminants}}" index-as="index"> <span>{{myProperty}}<span> //here also its not updating
<div>{{_checkSomeCondition(index)}}<div> //here its not getting updated value </template>

您的_checkSomeCondition方法将是:

_checkSomeCondition: function() { //I'll check and set property console.log(index); if(<your condition>){ this.myProperty = 'true'; } else{ this.myProperty = 'false'; } // Return whatever you want to show in UI return this.myProperty; console.log(this.myProperty); //I'll get the updated value on console },

并且您的myProperty应该通知更改。所以该属性应该有notify: true

使用此代码,我可以按预期看到UI中的更改。如果有帮助请告诉我