Изменение свойства не отражается в пользовательском интерфейсе, когда оно установлено из функции dom-repeat - Polymer
У меня есть массив объектов и свойства, моя структура 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 способа обновления объекта
Плункер: https://plnkr.co/edit/iAStve97dTTD9cv6iygX?p=preview
3 ответа
Установка переменной через this.myValue = 'somevalue'; не будет обновлять привязку.
Лучше всего устанавливать переменные через this.set('variablename', 'variablevalue');
Вы также можете, после установки свойства через this.variablename = 'variablevalue'; this.notifyPath('variablename'
);
Пытаться
<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) {
Я изменил ваш код, как показано ниже. Я не уверен, поможет ли это вашему сенарио. Пожалуйста, посмотрите, может помочь привести идеи
<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
,
С помощью этого кода я мог видеть изменения в пользовательском интерфейсе, как и ожидалось. Дайте мне знать, если это поможет