Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   тестовое задание (https://javascript.ru/forum/project/71383-testovoe-zadanie.html)

DynkanMaclaud 16.11.2017 13:04

Цитата:

Сообщение от destus
Во-первых, он наследуется от модели, что является очень плохим решением.

Почему наследуется?, Notes не имеет методов Storage, в конструкторе Notes я создаю Storage (да правильнее было бы передавать его как аргумент), и прокидываю туда Notes, т.е модель при инициализации подписываает View на события, а view триггерит эти события, которые улавливает Storage...

DynkanMaclaud 16.11.2017 13:06

destus,
не могли бы вы показать мне какой нибудь простой пример, именнно то как вы видите компонент

DynkanMaclaud 17.11.2017 01:53

Rise,
как такой вариант ? https://jsfiddle.net/yaepa0u2/7/
что насчет делегирования скажите?? стоит ли делать? неудобно будет сохранять индекс элемента в атрибуте ... потом через e.target , получать а далее в storage.remove ... и т.п, в данном случае из замыкания достает...

Vlasenko Fedor 17.11.2017 12:48

Плохо
Разные стили function Storage, class Notes
this.data = load() ? load() : [];

зачем дважды выполнять load(), если он вернет результат
var storageEnable = (function () {
        var state = false;
        try {
            window.localStorage.setItem('test', 'a');
            state = window.localStorage.getItem('test') === 'a';
            window.localStorage.removeItem('test');
        } catch (err) {
            console.log('Local storage disable');
        }
        return state;
    }()); // утка если крякает

this.remove :stop:
splice
this.set очень интересно. здесь либо this возвращать, для использования в дальнейшем цепочки вызовов или присваиваемое значение для плюшек в синтаксисе
если несколько раз используете document.createElement
то можно для создания написать функцию
<script>
function buildElement(tagName, props) {
  var element = document.createElement(tagName);
  for (var propName in props) element[propName] = props[propName];
  return element;
}

document.addEventListener("DOMContentLoaded", function() {
  var btn = buildElement('input', {
    type: 'button',
    value: 'Delete',
    style: 'background-color: red'
  });
  document.body.appendChild(btn);
});
</script>

и наверное лучше было раз создать, а затем по необходимости клонировать эти элементы


Часовой пояс GMT +3, время: 20:54.