我有对象数组和属性,我的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
答案 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中的更改。如果有帮助请告诉我