Stores

  1. Сохранять информацию
  2. Работать с элементами колекции
  3. Регировать на события в Dispatcher
  4. Оповещать Views про изменения

Что сохранять?

  • Состояние системы
  • Данные

Абстрактный Store 

function Store() {
    var elements = {};
    this.getAll = function() {
        ...
    };
    this.getById = function(id) {
        ...
    };
    this.add = function(el) {
        ...
    };
    //---Maybe---
    this.addFilter = function(predicate, name) {
        ...
    };
    this.removeFilter = function(name) {
        ...
    };
}

Взаимодействия

assign(Store.prototype, EventEmitter.prototype, {
    emitChange: function() {
        this.emit(CHANGE_EVENT);
    },
    addChangeListener: function(callback) {
        this.on(CHANGE_EVENT, callback);
    },
    removeChangeListener: function(callback) {
        this.removeListener(CHANGE_EVENT, callback);
    }
});

Ближе к реальности

TodoStore.prototype = assign(Object.create(Store.prototype), {
    retrieveData: function (dateFilter) {
        ...
    },
    createAndAdd: function(el) {
        ...
    },
    ...
};

function TodoStore() {
    Store.apply(this, arguments);
    ...
    //for example:
    this.isLoading = true;
}

Свяжем с Dispatcher

var todoStore = new TodoStore();
AppDispatcher.register(function (action) {
    switch (action.actionType) {
        case constants.RETRIEVE_TODOS:
            ...
            todoStore.emitChange()
            break;
        case constants.DELETE_TODO:
            ...
            todoStore.emitChange()
            break;
    }
}

Stores

By Roman Iakobchuk

Stores

  • 1,148