2015-09-24 2 views
2

Очень простой установки

Допустим, у нас есть вычисляемый свойствоСлушайте изменения в вычисленной собственности

data: { 
type: Array, 
computed: 'someFunc(someVar)' 
} 

и рядом мы определяем someFunc, как

function(someVar){ 
return [ 
    'one string', 
    'another string' 
] 
} 

и включить это в DOM as

<template is="dom-repeat" items="{{data}}" as="item"> 
<paper-input value="{{item}}"> 
</template> 

Проблема

Как мог я теперь слушать изменения к расчетному собственности, я заметил, что они являются отражается обратно к расчетному собственности, но observer не будет уволен. Я также попытался включить notify: true и прослушать событие data-changed без везения и просмотра API-интерфейса Polymer. Кажется, я не могу найти способ более непосредственно прослушать правильные события (хотя я знаю, что <paper-input> отправляет уведомление, однако Мне нужно, чтобы мой слушатель был общим и не был специфичным для <paper-input>)

ответ

-1

Возможно, это поможет.

<dom-module id="my-test"> 
     <template> 
     <button on-tap="change">Change someVar value</button> 
     <template is="dom-repeat" items="{{data}}" as="item"> 
      <paper-input value="{{item}}"> 
     </template> 
     </template> 

    <script> 
    Polymer({ 
     is: 'my-test', 
     properties:{ 
     someVar:{ 
      type:Number, 
      value:0 
     }, 
     data: { 
     type: Array, 
     computed: 'someFunc(someVar)',//computed when someVar changes 
     observer: "dataChanged"//fired when data changes 
     } 
     }, 
     ready: function() { 

     }, 
     dataChanged: function(newValue, oldValue){ 
     console.log(newValue);//newValue of data 
     console.log(oldValue);//old value of data 
     }, 
     change: function(){ 
     this.someVar = this.someVar+1; 
     }, 
     someFunc:function(someVar){ 
     return [ 
     'one string', 
     'another string', 
     this.someVar 
     ] 
     }, 
    }); 
    </script> 
</dom-module> 
+0

Конечно, непосредственное изменение зависимой переменной вызовет наблюдателя, однако изменение «бумажного ввода» изменит вычисленное свойство, но не вызовет наблюдателя на вычисленном свойстве. –

+0

Я думаю, что невозможно отслеживать пути, такие как «данные. *», Потому что данные являются массивом и должны быть объектом для него, могут использовать наблюдателя для определенного пути. Наблюдение за массивами может использоваться только для изменений, вызванных вызовами push, pop, shift, unshift и splice. Когда ввод изменяет его значение, вы ничего не делаете с массивом, поэтому массив не вызывает его наблюдателя –

0

Я понятия не имею, почему это не сработало раньше, но я побежал bower update и после регистрации слушателя как

listeners: { 
    'data-changed': 'test' 
}, 

вдруг действительно начинал работать, так что я предполагаю, что я столкнулся с какой-то ошибки или проблема, которая была исправлена ​​в последнее время.

Смежные вопросы