дарт-полимер обновить полимерные элементы корпуса

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

NoticeList nle = querySelector('#noticeList');
nle.notices = notices;

Но во второй раз, когда я вызываю этот код, сайт не меняется. Я что-то упускаю?

Спасибо

<polymer-element name="notice-list">
   <template>
     <ul id = "noticeEntrys">
        <template repeat="{{notice in notices}}">
          <li>
            <notice-element notice={{notice}}></notice-element>
          </li>
        </template>
      </ul>
    </template> 
  <script type="application/dart" src="notice_list.dart"></script>
</polymer-element>

 <polymer-element name="notice-element">
  <template>
    <div class="notice">
      <textarea rows="8" readonly>{{notice.getText()}}</textarea>
      <div class="controlls">
        <button type="button" name="delete" on-click={{delete}}>Delete</button>
        <button type="button" name="change" on-click={{change}}>Change</button>
      </div>
    </div>
  </template> 
  <script type="application/dart" src="notice_element.dart"></script>
</polymer-element>
@CustomTag('notice-list')
class NoticeList extends PolymerElement {
  NoticeList.created() : super.created() {
  }

  @published List<Notice> notices;
}

@CustomTag('notice-element')
class NoticeElement extends PolymerElement {
  NoticeElement.created() : super.created() {
  }

  @published Notice notice;

  void delete(Event e, var detail, Node target) {
    Datamanager.removeNotice(notice);
    Controller.updateListe();
  }

  void change(Event e, var detail, Node target) {
    Controller.updateActiveElement(notice);
  }

  void setNotice(Notice n)  {
    notice = n;
  }  
}

Изменить: я обновляю код так же, как я устанавливаю список в первый раз, когда я получаю новые данные через веб-сервис, и новые данные верны

static void noticesLoadedPolymerList(List<Notice> notices) {
    NoticeList nle = querySelector('#noticeList');
    nle.setNotices(notices);
  }

Edit2: я добавил простое целое число для отображения listSize @observable int listSize; Значение изменяется, если я назначаю новый список, а отображаемый контент - нет.


person lolsharp    schedule 28.01.2014    source источник
comment
Не могли бы вы добавить код, как вы создаете обновленный список notices? Код, который вы предоставили, выглядит нормально.   -  person Günter Zöchbauer    schedule 29.01.2014
comment
@ GünterZöchbauer, я добавил дополнительную информацию, может быть, это поможет, так как сейчас я действительно не понимаю, почему это не работает   -  person lolsharp    schedule 29.01.2014
comment
вы пробовали toObservable(notices) перед тем, как назначить его полимерному элементу? По-прежнему не вижу, где вы создали список.   -  person Günter Zöchbauer    schedule 29.01.2014


Ответы (2)


Если вы установите notices в NoticeList на новый экземпляр List, он должен распознать изменение. Если вы присваиваете notices в первой попытке и изменяете только во второй попытке, вы должны сделать свой notices список наблюдаемым var notices = toObservable([new Notice('notice1'), new Notice('notice2'), ...]).

Вы не предоставили код своего Notice класса. Может потребоваться сделать ваш класс Notice наблюдаемым, например:

класс Notice расширяет Object с помощью Observable {@observable String text; }

Таким образом, Polymer распознает, изменяется ли только свойство экземпляра уведомления (без изменения (добавления / удаления) списка notices.

person Günter Zöchbauer    schedule 29.01.2014

Наконец пришло время решить проблему.

Моя проблема заключалась в том, что я бы начал вот так полимер.

initPolymer();

когда я должен был начать это так

 initPolymer().run(() {
   //initialization and other stuff
 }

Подробнее об этом можно прочитать здесь https://code.google.com/p/dart/issues/detail?id=15379

person lolsharp    schedule 10.02.2014