Javascript.RU

Голосование: Web components планируете ли юзать в своих проектах
Опции опроса
Web components планируете ли юзать в своих проектах

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 15.04.2015, 00:52
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

x-repeat (demo)
На днях вернулся к теме веб-компонет. Сделал простой репитер

С помощью изменения значения атрибута элемента можно менять кол-во выводимых шаблонов:
<x-repeat count="1">
    <!-- html here -->
</x-repeat>

Полный код страницы
<!DOCTYPE html>
<html>
<head>
    <title>Web Components: Hello World</title>
    <meta charset="utf-8">
    <!--<script src="../../node_modules/babel/browser-polyfill.js"></script>-->
    <!--<script src="../../node_modules/webcomponents.js/webcomponents.min.js"></script>-->
</head>
<body>
    <h1>Web Components: Hello World</h1>

    <hr/>

    <section>
        <h2>Template</h2>
        <x-repeat count="1" id="test-repeat">
            <span>test_1</span>
            <span>test_2</span>
        </x-repeat>
    </section>

    <hr/>

    <section>
        <h2>Controls</h2>
        <label>count</label>
        <input type="number" value="1" id="test-input"/>
    </section>
    
    <script src="script.js"></script>
    <script src="HtmlXRepeatElement.js"></script>
</body>
</html>


Класс, описывающий компонет выглядит так
const TAG_NAME = `x-repeat`;

export default class HtmlXRepeatElement extends HTMLElement {
    // [url]https://learn.javascript.ru/webcomponent-core#жизненный-цикл[/url]
    render() {
        var count = Number(this.getAttribute('count')) || 0;
        var fragment = document.createDocumentFragment();
        this.innerHTML = null;
        for(var i = 0; i < count; i++) {
            fragment.appendChild(this.__getTemplate());
        }
        this.appendChild(fragment);
    }
    createdCallback() {
        // 1: save template
        this.__saveTemplate();
    }
    attachedCallback() {
        //2:
        this.render();
    }
    detachedCallback() {
        this.__clearTemplate();
    }
    attributeChangedCallback(name, prevValue, newValue) {
        this.render();
    }
    __saveTemplate() {
        var fragment = document.createDocumentFragment();
        var childNodes = this.childNodes;
        while(childNodes[0]) {
            fragment.appendChild(childNodes[0]);
        }
        this.__template = fragment;
    }
    __getTemplate() {
        return this.__template.cloneNode(true);
    }
    __clearTemplate() {
        this.__template = null;
    }
    static register(document) {
        document.registerElement(TAG_NAME, {
            prototype: HtmlXRepeatElement.prototype
        });
    }
}

Рабочая песочница (es5) (Хром, наверно...). Код es6 + модуль можно посмотреть там же.

Разумеется, вся прелесть в том, что таких элементов
<x-repeat count="1">
    <!-- html here -->
</x-repeat>

с разным содержимом можно навтыкать на странице сколько угодно)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #22 (permalink)  
Старый 15.04.2015, 10:17
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Поддержка браузерами с учетом полифилов

Т.е. с приходом веб компонет становятся ненужными React, Angular и прочие. Вероятно, jQuery тоже.

TODO: написать TODO list
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #23 (permalink)  
Старый 15.04.2015, 11:17
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от nerv_
с приходом веб компонет становятся ненужными React, Angular и прочие.
Я когда писал fj именно так и думал. Сейчас пишу на React
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #24 (permalink)  
Старый 15.04.2015, 11:21
Аватар для Safort
Профессор
Отправить личное сообщение для Safort Посмотреть профиль Найти все сообщения от Safort
 
Регистрация: 23.12.2013
Сообщений: 1,856

nerv_,
Цитата:
Т.е. с приходом веб компонет становятся ненужными React, Angular и прочие. Вероятно, jQuery тоже.
Можно по подробнее? Я пока не сильно вникал в эту тему, но мне интересно, почему ты так считаешь.
Ответить с цитированием
  #25 (permalink)  
Старый 15.04.2015, 18:34
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Цитата:
Можно по подробнее? Я пока не сильно вникал в эту тему, но мне интересно, почему ты так считаешь.
Потому что будет нативный декларативный view, с возможностью писать свои компоненты. А нафига тогда шаблонизатор ангуляровский и тем более реакт?
__________________
Научу себя плохому
Ответить с цитированием
  #26 (permalink)  
Старый 15.04.2015, 18:41
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от l-liava-l
А нафига
Удобно потому что.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработчик WEB интерфейсов / JavaScript (ExtJS, Yii) в Москве Svet2010 Работа 0 16.07.2012 16:24
Вакансия Web Developer, Киев SysIQ Работа 13 02.08.2011 13:23
Как взломать K9 web protection admin? Questioner Оффтопик 1 19.02.2011 22:39
Мастер-класс по Highload: Разработка крупного масштабируемого web 2.0 проекта с нуля [DiMA] Серверные языки и технологии 30 17.11.2010 21:57
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40