Комфортная разработка пользовательских интерфейсов

Столяр Артур, Профессионалы.ru

Комфортная разработка пользовательских интерфейсов

Столяр Артур, Профессионалы.ru

Проблемы

Проблемы: Связанность

Стили

Разметка

Данные

Решение

Декларация конролов

Декларация контролов

<div id="my-elem">...</div>
<script>
  var elem = document.getElementById('my-elem');
  myEngine.declareData('my-control', elem, {
    key: value
  });
</script>

Декларация контролов

<div data-control="my-control"
  data-key="value"
  data-key2="value2"
>...</div>

Типы данных

<div data-control="my-control"
  data-selected="true"
  data-count="10"
  data-url="http://example.com/"
>...</div>

Стандартные типы данных

  • string
  • number
  • array
  • boolean
  • json
  • target

Дополнительные типы:

Объявление типов свойств в JS

define({
  handler: function() {...},
  properties: {
    selected: 'boolean',
    count: 'number',
    url: 'string'
  }
});

Объявление типов свойств в JS

define({
  handler: function() {...},
  properties: {
    selected: ['boolean', false],
    count: ['number', 0],
    url: ['string', '']
  }
});

Объявление типов свойств в JS

define({
  handler: function() {...},
  properties: {
    selected: { type: 'boolean', value: false, set: fn... },
    count: { type: 'number', get: fn..., set: fn... },
    url: { type: 'string', get: fn..., value: ''},
  }
});

Получение данных внутри контрола

define({
  handler: function() {
    ...
    this.get('url');
    this.get('selected');
    this.set('selected', false);
    this.get('time');
    this.get('number:time');
    ... }
  });

Получение данных внутри контрола

define({
  handler: function() {
    ...
    this.get('number:time');
    this.get('date:time');
    ...
  }
});

Декларация контролов

Изменение значений свойств

this.set('selected', true);
=>
<div data-control="my-control"
  data-selected="true"
>...</div>

Изменение значений свойств

this.set('string:myVal', 'my-string');
=>
<div data-control="my-control"
  data-my-val="my-string"
>...</div>

Визуализация

Визуализация

<style>
.my-control {
  background: red;
}

.my-control[data-toggle="1"] {
  background: blue;
}
</style>
<div data-control="toggle"
  data-toggle="0"
  class="my-control">
  Toggle me
</div>

Визуализация

Связь между контролами

var button = this.children.myButton;
<button data-control="button"
  data-name="my-button">...</button>

Связь между контролами

<div data-control="my-control"
  data-some-target="id-of-control" data-next-target=":next"
  data-other-next-target=":next:2"
></div>

Связь между контролами

Расширение стандартных контролов браузера

Элемент base

define({
  handler: function() {...},
  properties: {...},
  base: ['button', 'a', '[role="button"]']
});

Элемент base

<div data-control="button">
  <div>
     <button>Click me!</button>
   </div>
</div>

Элемент base

<button data-control="button">Click me!</button>

Контролы

ComfortUI

Комфортная разработка
пользовательских интерфейсов

Стоялр Артур, Профессионалы.ru

Fork me on Github