Шаблон dom-repeat не может отобразить массив с ошибкой «ожидаемый массив для элементов»

У меня есть простой шаблон, который отображает объект массива. Однако это не удается со следующим сообщением:

[dom-repeat::dom-repeat]: expected array for `items`, found [{"code":1,"name":"Item #1"},{"code":2,"name":"Item #2"},{"code":3,"name":"Item #3"}]

Массив передается в атрибуте пользовательского элемента в следующем формате:

[{"code":1,"name":"Item #1"},{"code":2,"name":"Item #2"},{"code":3,"name":"Item #3"}]

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

Любая помощь приветствуется!

Вот мой пользовательский элемент:

<dom-module id="x-myelement">   
    <template>
        <div>
            <h1>{{title}}</h1>
            <ul>
                <template is="dom-repeat" as="menuitem" items="{{items}}">
                    <li><span>{{menuitem.code}}</span></li>
                </template>
            </ul>           
        </div>
    </template>
    <script>
        (function() {
            Polymer({
              is: 'x-myelement',

              title: String,

              items: {
                  type: Array,
                  notify: true,
                  value: function(){ return []; }
              }           
            });
          })();
    </script>
</dom-module>

И вот теперь я его использую:

<x-myelement title="Hello Polymer" 
             items='[{"code":1,"name":"Item #1"},{"code":2,"name":"Item #2"},{"code":3,"name":"Item #3"}]'>
</x-myelement>

person Chakkaradeep Chandran - MSFT    schedule 09.08.2015    source источник


Ответы (1)


Вам необходимо поместить свойства элемента в объект properties (см. документацию по Polymer на свойства):

Polymer({
  is: 'x-myelement',
  properties: {
    title: String,
    items: {
      type: Array,
      notify: true,
      value: function() {return [];}
    }
  }
});

В противном случае у Polymer нет информации о ваших свойствах. Он обрабатывал элементы как строку и не анализировал значение атрибута как массив JSON. В конце концов, dom-repeat также была передана строка для его свойства items, что привело к ошибке, которую вы видели.

person Dirk Grappendorf    schedule 09.08.2015
comment
Огромное спасибо! Я почему-то знал, что это должно быть глупой ошибкой! Сейчас работает :) - person Chakkaradeep Chandran - MSFT; 10.08.2015