Работаю с Полимер. Вот мое понимание. Каждый элемент функциональности, такой как кнопки, выпадающие меню, списки и т. д., может стать собственным повторно используемым веб-компонентом. Затем вы можете использовать этот веб-компонент в своем проекте или поделиться им с другими проектами. Это всего лишь JavaScript, CSS и HTML. Помимо включения ссылки на Polymer и ваш веб-компонент, потребители вашего веб-компонента могут создавать красивый чистый HTML-код с богатой функциональностью.

Вы платите цену за эту чистоту. Полимер сам по себе является каркасом. Вы можете включать сторонние фреймворки OSS, такие как angular, ember, backbone, jquery, в свой веб-компонент, но я чувствую, что вам не следует этого делать. У Polymer есть свои селекторы, привязка данных и уникальная причина выполнения ajax-запросов (см. iron-ajax). Удивительно иметь возможность скрыть сложность веб-компонента от потребителя, но почему API для Polymer кажется мне таким чуждым? После долгой работы с фреймворком он все еще не кажется интуитивно понятным.

Вот один пример. Документация Polymer предлагает не использовать встроенные функции изменения массива JavaScript. Я уверен, что это связано с тем фактом, что массивы в Polymer доступны для наблюдения. Разработчик хотел бы убедиться, что пользовательский интерфейс уведомлен об изменении дочернего элемента в массиве. Я согласен с этим. Что кажется странным, так это то, как вы должны мутировать массивы. Ниже приведен фрагмент кода, в котором мы объявляем и изменяем массив. Для справки вот документация Polymer наблюдать за мутациями массива.

Массив «users» объявляется в свойстве «properties» объекта, переданного в функцию Polymer (см. строку 12). Если вы хотите изменить массив пользователей, вы должны использовать волшебную строку, которую Polymer называет путем, соответствующим имени массива (см. строку 16). В строке 16 показано, как добавить элемент в массив пользователей с помощью функции мутации массива Polymer «push». Не знаю почему, но синтаксис мутации массива кажется странным. Почему я не могу просто сделать «this.users.push(user)»

Пока я не заметил в документации Polymer функцию мутации массива clear или removeAll. Возможно, вы сможете воспользоваться функцией склеивания для очистки массива, но я не видел, чтобы это было продемонстрировано. Здесь стоит отметить, что на этих ранних стадиях отсутствуют вопросы и ответы о stackoverflow для Polymer. Трудно найти ответы.

Я уверен, что есть блестящие причины, по которым Polymer обрабатывает массивы таким образом. Это может быть связано с теневым DOM или возможностью уведомить представление об изменении дочерних элементов массива. Мне нужно будет копнуть глубже, чтобы выяснить, почему.

Я буду продолжать работать с Polymer. Polymer может изменить то, как мы все разрабатываем веб-приложения. Возможность так легко делиться пользовательскими HTML-элементами очень привлекательна для меня. Кривая обучения крутая. При изучении angular вы могли обойтись знанием JavaScript, и все работало. С Polymer есть много подводных камней, которыми я, надеюсь, поделюсь в следующем посте.