Как заставить событие propertyChange

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

Для такого элемента модели, как этот...

<polymer-element name="my-model" attributes="rows">
...
<script>
  ...
  this.rows[0][0] = newValue;
</script>

Я нахожу, когда я использую его в элементе представления, подобном этому...

<my-view rows="{{model.rows}}"></my-view>

где реализация представления выглядит так...

<polymer-element name="my-view" attributes="rows">
<template>
   <template repeat="{{row in rows}}">
     <template repeat="{{col, i in cols}}">
       {{row[i]}}
     </template>
   </template>
</template>

мое представление не обновляется, если я не сбросил значение массива в модели

this.rows = []

Могу ли я каким-то образом вызвать событие изменения свойства. Я старался...

this.rows = this.rows

..а также...

this.notifyPropertyChanged('rows', this.rows, this.rows)

и не повезло. Любые идеи были бы хорошы. Спасибо!


person lazieburd    schedule 01.05.2014    source источник


Ответы (1)


Во втором шаблоне ошибка. Поскольку вы используете именованную область действия, ваш второй шаблон должен быть {{col, i in row}}:

<template repeat="{{row in rows}}">
  <template repeat="{{col, i in row}}">

Это сработало для меня: http://jsbin.com/sidagomu/1/edit

(щелкните элемент -> обновления данных -> повторная визуализация шаблона)

person ebidel    schedule 02.05.2014
comment
Это сработало. Спасибо. ПРИМЕЧАНИЕ. Я перебирал столбцы, которые имели бы ту же длину, что и строка, поэтому программно это не должно иметь значения, когда я в конечном итоге просто вызываю строку [i]. Но поскольку я не использовал строку, полимер не создавал автоматического наблюдаемого связывания. Надеюсь, теперь, когда я вижу проблему, я больше не повторю эту ошибку. - person lazieburd; 02.05.2014
comment
Я думаю, что это может быть ошибка. Если у вас есть: this.cols = [ "One", "Two", "Three" ];, тогда cols входит в область действия внутреннего шаблона, а {{col, i in cols}} должно работать. Я не понимаю, почему row[i] обновляется в одном случае, а не в другом. На самом деле, даже если вы используете {{col, i in [ 1, 2, 3 ]}}, привязка не обновляется. Что-то подозрительно. Тем не менее, использование {{col in row}} и {{col}} просто и должно работать надежно. - person DocDude; 02.05.2014