Статьи

Введение в кросс-платформенные, кросс-браузерные WinJs

В случае, если вы пропустили  громкое объявление , Microsoft открыла свои библиотеки Windows для JavaScript, иначе известный как  WinJS . Многие из вас, возможно, не заметили этого, потому что, как и я, вы предполагали, что WinJS — это просто оболочка для доступа к среде выполнения Windows из JavaScript. Если бы этот блог был на год старше, это было бы правдой, но это уже не так. Хотя библиотека была изначально построена для создания Windows 8 опыта, команда упорно трудились , чтобы расширить этот опыт к Windows Phone и , наконец , в самом браузере. Это означает, что он обеспечивает действительно кросс-платформенный, кросс-браузерный опыт. Вы можете создать веб-приложение с помощью библиотеки и буквально запустить его в браузере Android. Это так просто.

Я рассмотрел некоторые основные моменты в своем приложении  // Build WinJS  Windows Store, которое я написал в виде слайд-презентации с использованием HTML и JavaScript. Это приложение было специально разработано для работы в Windows 8.1, поэтому я не адаптировал его для Интернета. Чтобы создать веб-пример, мне пришлось выгрузить библиотеку WinJS из GitHub (инструкции по ее разархивированию и сборке находятся на  главной странице ). Было немного странно тянуть проект Microsoft с помощью git, а затем компилировать его с помощью grunt, но все готово. Времена меняются! Я скопировал сборку в новый каталог и приступил к работе над очень простым примером, который я творчески назвал  «Книги Джереми» . Вы можете  поиграть с примером онлайн или встроенный Вы сможете прокручивать и нажимать / касаться своего списка (нажмите на ссылку, чтобы открыть его). Не забудьте обновить, чтобы вы могли видеть анимацию.

Есть действительно шесть вещей, которые я показываю здесь:

  1. Как создать базовое приложение WinJS
  2. Привязка данных через шаблоны
  3. Использование WinJS предоставленных таблиц стилей
  4. Анимация входа на страницу
  5. Нажмите анимации
  6. Элемент управления ListView

Для более подробного ознакомления вы можете проверить все элементы управления и поэкспериментировать на сайте Try WinJS  .

Основной шаблон для подключения приложения выглядит следующим образом (найдите его в исходном файле app.js)

WinJS.Application.onready = function () {
    WinJS.UI.processAll();
};
WinJS.Application.start();

Призыв к обработке всего — это то, что запускает разбор декларативной разметки и создание экземпляров фактических элементов управления. После обработки элементов управления я запускаю анимацию ввода страницы, чтобы анимировать элементы справа. Когда анимация заканчивается, я нахожу элементы управления, которые были сгенерированы в результате привязки данных к проводу в обработчиках кликов для эффекта касания (коснитесь обложки книги, и вы увидите, как она реагирует).

WinJS.UI.Animation.enterPage(document.getElementById('mainDiv'), null).then(function () {
    var controls = document.getElementsByClassName("book"), i;
    for (i = 0; i < controls.length; i+=1) {
        addPointerDownHandlers(controls[i]);
        addPointerUpHandlers(controls[i]);
    }
});

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

function addPointerUpHandlers(target) {
    target.addEventListener("pointerup", onPointerUp, false);
    target.addEventListener("touchend", onPointerUp, false);
    target.addEventListener("mouseup", onPointerUp, false);
}

И срабатывает соответствующая анимация:

function onPointerUp(evt) {
    WinJS.UI.Animation.pointerUp(evt.target);
    evt.preventDefault();
}

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

WinJS.Namespace.define("Book.ListView", {
    data: new WinJS.Binding.List(books)
});

Теперь, когда он подключен, давайте посмотрим на HTML. Базовый HTML просто включает в себя базу для WinJS и пользовательского интерфейса, а также несколько таблиц стилей. Я использую «светлую» тему, но вы можете поменять ее на темную, чтобы увидеть, как она меняется (я предпочитаю темную, но уже привыкла к темным темам для презентации). Я использую атрибут specialdata-win-control для определения шаблона элемента:

<div id="bookTemplate" data-win-control="WinJS.Binding.Template" style="display: none">
    <div class="book">
        <img src="#" data-win-bind="src: img; alt: title"/>
        <h4><a href="#" target="_blank"
 data-win-bind="href: link; textContent: title"></a></h4>
    </div>
</div>

Обратите внимание на тег изображения, что атрибуты не связаны напрямую. Вместо этого атрибут привязки используется для предоставления списка атрибутов родительского элемента и свойств, с которыми они связывают свои значения (в этом случае атрибут src связан со свойством img, а атрибут alt связан со свойством title данные). Далее я объявляю представление списка с опциями. Мне особенно нравится, что WinJS сокращает пробелы, так что я могу форматировать свои параметры в несколько строк. Эти опции предоставляют шаблон для представления в виде списка, показывают, как обрабатывать касания и пролистывания, предоставляют шаблон элемента, а также откуда данные извлекаются. Некоторые могут утверждать, что слишком много императивного кода заключено в декларативный атрибут; однако параметры также могут быть установлены программно.

<div class="bookList" data-win-control="WinJS.UI.ListView"
        data-win-options="{
        itemDataSource: Book.ListView.data.dataSource,
        itemTemplate: bookTemplate,
        selectionMode: 'none',
        tapBehavior: 'none',
        swipeBehavior: 'none',
        layout: { type: WinJS.UI.GridLayout }
        }"></div>

Вы должны заметить, что я передал обычный JSON опции связывания списка. Я не привязываю напрямую к объекту, а привязываю к открытому свойству dataSource. Как видите, было очень просто соединить удобное взаимодействие с пользователем с выбором, анимированной обратной связью и прокруткой. Хотя я с оптимизмом смотрю на использование этой библиотеки в будущем, сейчас ее размер очень важен. Размер несжатого JavaScript для пользовательского интерфейса составляет почти 3 мегабайта, затем добавьте еще один мегабайт для базы. Кроме того, добавьте таблицы стилей по 150 КБ, и вы посмотрите на многое для загрузки в браузере. Я надеюсь, что в будущем появятся варианты для создания определенных элементов управления и предоставления урезанной версии, которая содержит только самые необходимые элементы для того, что будет использоваться в приложении.

Очевидно, что есть пути, но реальное обещание — это возможность создавать впечатления, которые действительно могут делиться как кодом, так и разметкой между несколькими целями, будь то платформы и браузеры, или нативные приложения, такие как приложения Магазина Windows. Я буду пристально следить за этой структурой по мере ее развития и с нетерпением жду возможности поделиться в следующих постах.

Возьмите источник  и  посмотрите демо .