Comments 25
Полезное расширение. Есть маленькое замечание, следующий код избыточен (если defaultValue undefined, то зачем его устанавливать в undefined). Это будет иметь смысл, только если новое значение не будет undefined. Сделать пул-реквест?
defaultValue = typeof defaultValue === 'undefined' ? undefined: defaultValue;
0
Массивы слишком простой тип данных чтобы прикручивать к нему события.
+2
И соглашусь, и нет. К примеру, коллекции в Backbone.Js решают подобные задачи, но код раздут.
0
Ок, вы можете использовать традиционные массивы и Arr совершенно параллельно, или создание «классов» с интерфейсом похожим на массив запрещено?
0
Хозяин, как говорится, барин.
Пару моментов:
1. events лучше сделать через объект, а не массив. Во-первых вы не будете бегать по всему массиву евентов при проброске события.
Во вторых, намного проще будет делать отписку, которой сейчас нету.
2. Сейчас у объекта есть лишь одно событие, и в каждом передается тип.
Использование такой конструкции приведет к switch или if else, для разделения событий. Проще сразу бросать событие с нужным именем и обрабатывать его без проверок.
Вот неплохая реализация работы с событиями github.com/Wolfy87/EventEmitter.
Пару моментов:
1. events лучше сделать через объект, а не массив. Во-первых вы не будете бегать по всему массиву евентов при проброске события.
Во вторых, намного проще будет делать отписку, которой сейчас нету.
2. Сейчас у объекта есть лишь одно событие, и в каждом передается тип.
Использование такой конструкции приведет к switch или if else, для разделения событий. Проще сразу бросать событие с нужным именем и обрабатывать его без проверок.
Вот неплохая реализация работы с событиями github.com/Wolfy87/EventEmitter.
0
Работает по типу Object.observe?
0
Рассмаривал вариант с Object.observe, но нет, так как kangax.github.io/compat-table/es7/#Object.observe
0
Да, да. Конструктор инициализируется не совсем корректно. Исправим. Спасибо.
0
Ну и если редактировать массив при помощи `length` или менять значения по индексу, никаких событий не будет. Или например `splice` генерирует только `remove`, хотя сам метод не только удаляет.
0
Учтите, что этот вариант не работает в IE меньше 11го, т.к. в этих IE не поддерживается __proto__
0
Кстати, целью было поддерживать библиотеку и в IE8+, поэтому для начала попробую корректно применить конструктор Array, в противном случае прийдется написать «похожее» поведение.
0
Решением для IE может быть копирование всех методов из прототипа в экземпляр в конструкторе CustomArray и в методах «concat», «reverse», «slice», «splice», «sort», «filter», «map». Из минусов можно выделить то, что не будет работать оператор instanceof.
0
Конструктор теперь проходит тест. Правда логика конструктора != Array.prototype.constructor, что пока выглядит несколько странно. Буду иметь ввиду и подбирать более удачное решение.
0
// trying to get undefined element
// null
// null
+2
Считаю, что проще использовать такую конструкцию, где нужно:
var fruits = new Arr('apple', 'orange', 'pineapple');
function refresh(massive) {
// изменение других данных и так далее
// отложенный рендеринг
// автоматическое сохранение данных на сервер
}
fruits.push('banana');
refresh(fruits);
Т.к. в данном случае не нужна постоянно сидящая в памяти «прослушка».
var fruits = new Arr('apple', 'orange', 'pineapple');
function refresh(massive) {
// изменение других данных и так далее
// отложенный рендеринг
// автоматическое сохранение данных на сервер
}
fruits.push('banana');
refresh(fruits);
Т.к. в данном случае не нужна постоянно сидящая в памяти «прослушка».
-1
Пример #1: компонент
Пример #2: компонент
В противном случае, необходимо знать какие методы (у каждого компонента) выведены наружу, например
Но такой подход — это всегда дело вкуса.
List
для пере-рендеринга представления должен знать только о: данных, шаблоне, контейнере (куда вывыодить данные) и когда обновляться. Поэтому я посчитал логичным: инициализировать компонент этими минимально-необходимыми данными, дать интерфейс через который я смогу проще общаться с компонентом (только добавление / обновление / удаление) — проще говоря почти обычный массив. Интервейс работы с более чем одним компонентом теперь черезвычайно прост — добавилось-изменилось-удалилось: прошло обновление во всех компонентах-слушателях.Пример #2: компонент
ServerSync
. Использует тот же интерфейс. Выполняет совершенно другие задачи.В противном случае, необходимо знать какие методы (у каждого компонента) выведены наружу, например
List.render(massive)
, ServerSync.update(massive)
создают необходимость каждый раз подсматривать в реализацию (документацию).Но такой подход — это всегда дело вкуса.
0
Sign up to leave a comment.
Arr.js: события для стандартного массива