Должны ли атрибуты передаваться как объекты?

Когда я передаю значения атрибуту полимерного элемента, я могу передать объект через привязку данных Polymer. Однако, если я решу оставить «polymer-land» и захочу установить атрибут для объекта, я не смогу. Должен ли я передавать объекты в атрибуты?

Если ответ «нет, вы должны использовать для этого методы», то последующий вопрос будет таким: «Могу ли я вызвать метод элемента, не находясь в среде Polymer?» Например, если у меня есть элемент Polymer:

<hello></hello>

и я хочу получить доступ к методу, который он назвал «мир». В Полимере это будет:

this.$.hello.world();

Можно ли вызвать этот метод, не находясь в определении элемента Polymer?


person Jay Ryoo    schedule 18.02.2014    source источник


Ответы (2)


Полимер изнутри

Как вы указали, внутри Polymer можно использовать привязку данных для привязки объекта к опубликованному свойству:

<polymer-element name="other-el">
  <template>
    <hello-world persons="{{persons}}"></hello-world>
  </template>
  <script>
    Polymer('other-el', {
      created: function() {
        this.persons = [{'name': 'Eric'}, {'name': 'Bob'}];
      }
    });
  </script>
</polymer-element>

Извне Полимер

Вне Polymer элементы Polymer также поддерживают сериализованные массивы/объекты для атрибутов, если их подсказывается тип свойства:

<hello-world persons="[{'name': 'Eric'}, {'name': 'Bob'}]"></hello-world>

Поскольку .persons является свойством элемента, вы также можете установить его в JS:

document.querySelector('hello-world').persons = [{'name': 'Eric'}, {'name': 'Bob'}];
person ebidel    schedule 19.02.2014

Итак, чтобы ответить на мой собственный вопрос.

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

Чтобы вызвать метод, вы можете использовать простой выбор элемента и вызов метода.

document.querySelector('hello').world();

Я думал, что пробовал это, и это не сработало.

-Джей

person Jay Ryoo    schedule 18.02.2014