datastore

набор методов datastore

object datastore;
Details

Обратите внимание, что задачи и связи должны изменяться с использованием общего API Gantt. Изменение задач или связей напрямую в datastore может привести к неожиданным результатам. Ожидается, что datastore будет использоваться для ресурсов или других пользовательских объектов.

Новый datastore можно создать, используя метод createDatastore.
Объект datastore обладает следующими методами и событиями:

Методы

  • parse (data): void - загружает данные из массива
    • data - (Array<object>) - данные для загрузки
    gantt.$resourcesStore.parse([
        {id: 1, text: "QA", parent:null},
        {id: 2, text: "Development", parent:null},
        {id: 3, text: "Sales", parent:null},
        {id: 4, text: "Other", parent:null},
        {id: 5, text: "Unassigned", parent:4},
        {id: 6, text: "John", parent:1},
        {id: 7, text: "Mike", parent:2},
        {id: 8, text: "Anna", parent:2},
        {id: 9, text: "Bill", parent:3},
        {id: 10, text: "Floe", parent:3}
    ]);

    Related sample:  Resource load diagram

    Аналогом datastore.parse() является gantt.parse().
    Вызывает события onBeforeParse, onItemLoading, onParse и onStoreUpdated.
  • getItem (id): object | void - возвращает элемент по его id
    • id - (string | number) - id элемента
  • updateItem (id, item): void - обновляет указанный элемент
    • id - (string | number) - id элемента
    • item? - (object) - объект элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    var resource = store.getItem(resourceId);
    resource.text = "modified";
    store.updateItem(resourceId);
    // или
    store.updateItem(resourceId, { text: "modified" });


    Аналогами datastore.updateItem() являются gantt.updateTask() и gantt.updateLink().
    Вызывает события onBeforeUpdate, onAfterUpdate и onStoreUpdated.
  • removeItem (id): void - удаляет указанный элемент
    • id - (string | number) - id элемента
  • isVisible (id): boolean - проверяет, виден ли указанный элемент или скрыт фильтрами
    • id - (string | number) - id элемента
    Возвращает true, если задача видна. В противном случае, false.
    var store = gantt.getDatastore(gantt.config.resource_store);
    if(store.isVisible(resourceId)){
        console.log(resourceId);
    }


    Аналогом datastore.isVisible() является gantt.isTaskVisible().
  • getVisibleItems (): Array<object> - возвращает массив видимых элементов
    var store = gantt.getDatastore(gantt.config.resource_store);
    var items = store.getVisibleItems();

  • addItem (item, index): number | string - добавляет новый элемент в datastore
    • item - (object) - объект элемента
    • index? - (number) - позиция, на которую будет добавлен элемент (0 или больше)
    Возвращает id элемента.
  • changeId (oldId, newId): void - изменяет id элемента
    • oldId - (string | number) - текущий id элемента
    • newId - (string | number) - новый id элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
     
    var itemId = store.addItem({
        text: "Unassigned",
        parent:4
    });
     
    // itemId - временный клиентский id нового элемента
    // как только элемент будет сохранен в базе данных - обновите клиент новым id:
     
    store.changeId(itemId, "databaseId");


    Аналогами datastore.changeId() являются gantt.changeTaskId() и gantt.changeLinkId().
    Вызывает событие onIdChange.
  • exists (id): boolean - проверяет, существует ли указанный элемент в datastore
    • id - (string | number) - id элемента
    Возвращает true, если задача существует. В противном случае, false.
    var store = gantt.getDatastore(gantt.config.resource_store);
     
    if(store.exists(resourceId)){
        console.log(resourceId);
    }


    Аналогами datastore.exists() являются gantt.isTaskExists() и gantt.isLinkExists().
  • move (sindex, tindex): void - перемещает элемент на новую позицию
    • sindex - (number) - индекс текущей позиции задачи
    • tindex - (number) - индекс позиции, на которую будет перемещен элемент
    var store = gantt.getDatastore(gantt.config.resource_store);
     
    // обмен двух элементов
    var idA = 1;
    var idB = 5;
    var indexA = store.getIndexById(idA);
    var indexB = store.getIndexById(idB);
    store.move(indexB, indexA);
     
    indexA = store.getIndexById(idA);
    store.move(indexA, indexB);


    Аналогом datastore.move() является gantt.moveTask().
    Вызывает событие onStoreUpdated.
  • clearAll (): void - очищает datastore
  • silent (callback): void - выполняет код без вызова событий API datastore
    • callback - (Function) - функция обратного вызова
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.silent(function(){
        store.eachItem(function(item){
            item.text += " modified";
            store.updateItem(item.id);
        });
    });
    store.refresh();


    Аналогом datastore.silent() является gantt.silent().
  • refresh (id): void - запускает перерисовку событий указанной записи, применяет фильтры
    • id? - (string | number) - необязательный, id записи
  • count (): number - возвращает количество элементов, загруженных в datastore в данный момент
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onParse", function(){
        alert(store.count() + " items loaded");
    });


    Аналогами datastore.count() являются gantt.getTaskCount() и gantt.getLinkCount().
  • countVisible (): number - возвращает количество видимых элементов
    var store = gantt.getDatastore(gantt.config.resource_store);
    alert(store.countVisible() + " items are visible");


    Аналогом datastore.countVisible() является gantt.getVisibleTaskCount().
  • eachItem (callback): void - перебирает все задачи datastore
    • callback - (Function) - функция обратного вызова
    var store = gantt.getDatastore(gantt.config.resource_store);
     
    var searchItems = [];
    store.eachItem(function(item){
        if(!item.value){
            searchItems.push(item);
        }
    });


    Аналогом datastore.eachItem() является gantt.eachTask().
  • filter (): void - запускает фильтры и обновляет массив видимых элементов
  • Обычно, вам не нужно вызывать этот метод, он вызывается автоматически из метода store.refresh().
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.filter();

  • sort (field, desc, parent, silent): void - сортирует элементы в resource grid
    • field - (string | Function) - имя столбца, по которому будет сортироваться resource grid, или функция пользовательской сортировки
    • desc? - (boolean) - указывает направление сортировки: true - по убыванию, false - по возрастанию. По умолчанию, false
    • parent? - (string | number) - id родительского элемента. Укажите этот параметр, если хотите отсортировать элементы только в ветке указанного родителя.
    • silent? - (boolean) - указывает, следует ли выполнять рендеринг после изменения порядка элементов
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.parse([
        {id: 1, text: "QA", parent:null},
        {id: 2, text: "Development", parent:null},
        {id: 3, text: "Sales", parent:null},
        {id: 4, text: "Other", parent:null},
        {id: 5, text: "Unassigned", parent:4},
        {id: 6, text: "John", parent:1},
        {id: 7, text: "Mike", parent:2},
        {id: 8, text: "Anna", parent:2},
        {id: 9, text: "Bill", parent:3},
        {id: 10, text: "Floe", parent:3}
    ]);
     
    // сортировка resource grid по столбцу
    var resourceSortDirection = false;
    function sortResources(){
        resourceSortDirection = !resourceSortDirection;
        gantt.getDatastore("resource").sort("text", resourceSortDirection)
        gantt.render();
    }

    или вы можете определить пользовательскую функцию для сортировки:
    var resourceSortDirection = false;
    function sortResources(){
        resourceSortDirection = !resourceSortDirection;
        gantt.getDatastore("resource").sort(function (resource1, resource2){
            return resource1.id - resource2.id;
        }, resourceSortDirection)
        gantt.render();
    }

    Аналогом datastore.sort() является gantt.sort().
  • getIndexRange (from, to): Array<object> - возвращает записи между указанными индексами
    • from - (number) - позиция начальной записи
    • to - (number) - позиция конечной записи
    var store = gantt.getDatastore(gantt.config.resource_store);
    var itemsInViewPort = store.getIndexRange(5, 10);// получить элементы с 5-го по 10-й

  • getItems (): Array<object> - возвращает все записи datastore
    var store = gantt.getDatastore(gantt.config.resource_store);
    var items = store.getItems();


    Аналогами datastore.getItems() являются gantt.getTaskByTime() и gantt.getLinks().
  • getIdByIndex (index): string | number | void - возвращает id элемента по его индексу. Возвращает `undefined`, если на указанном индексе нет элемента.
    • index - (number) - позиция элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    var firstItem = store.getIdByIndex(0);


    Аналогом datastore.getIdByIndex() является gantt.getTaskByIndex().
  • getIndexById (id): number - возвращает индекс элемента по его id. Возвращает `-1`, если такого элемента нет в datastore.
    • id - (string | number) - id элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    var itemIndex = store.getIndexById(5);


    Аналогом datastore.getIndexById() является gantt.getTaskIndex().
  • getFirst (): string | number | null - возвращает id первого элемента datastore
    var store = gantt.getDatastore(gantt.config.resource_store);
    var firstId = store.getFirst();


  • getLast (): string | number | null - возвращает id последнего элемента datastore
    var store = gantt.getDatastore(gantt.config.resource_store);
    var lastId = store.getLast();

  • getNext (id): string | number | null - возвращает id следующего элемента datastore
    • id - (string | number) - id элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    var firstId = store.getFirst();
    var secondId = store.getNext(firstId);


    Аналогом datastore.getNext() является gantt.getNext().
  • getPrev (id): string | number | null - возвращает id предыдущего элемента datastore
    • id - (string | number) - id элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    var prevId = store.getPrev(itemId);


    Аналогом datastore.getPrev() является gantt.getPrev().
  • destructor (): void - очищает datastore и удаляет все прикрепленные обработчики событий. После вызова этого метода datastore не может быть использован.
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.destructor();


    Аналогом datastore.destructor() является gantt.destructor().
  • attachEvent (name, handler, settings): string - прикрепляет обработчик к внутреннему событию DataStore
    • name - (string) - имя события, регистронезависимое
    • handler - (Function) - функция обработчика
    • settings? - (object) - необязательный, объект с настройками для обработчика событий
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onAfterSelect", function(id){
        gantt.refreshData();
    });


    Аналогом datastore.attachEvent() является gantt.attachEvent().
  • callEvent (name, params): boolean - вызывает внутреннее событие
    • name - (string) - имя события, регистронезависимое
    • params - (Array<any>) - массив данных, связанных с событием
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.callEvent("CustomEvent", [param1, param2]);


    Аналогом datastore.callEvent() является gantt.callEvent().
  • detachEvent (id): void - отсоединяет обработчик от события (который был прикреплен ранее методом attachEvent())
    • id - (string) - id события
    var store = gantt.getDatastore(gantt.config.resource_store);
    var handlerId = store.attachEvent("onAfterSelect", function(id){
        gantt.refreshData();
    });
     
    // отсоединить слушателя
    store.detachEvent(handlerId);


    Аналогом datastore.detachEvent() является gantt.detachEvent().

События

  • onItemLoading (item) - вызывается, когда элемент загружается из источника данных
    • item - (object) - объект элемента
    Возвращает false для предотвращения стандартного действия события, иначе true.
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onItemLoading", function(item){
        if(item.valid){ // фильтрация элементов при загрузке по пользовательскому свойству
            return true;
        }
        return false;
    });


    Аналогом события onItemLoading в datastore является событие onTaskLoading в Gantt.
  • onBeforeParse (data) - вызывается перед началом разбора данных
    • data - (Array <any>) - массив с загруженными данными
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onBeforeParse", function(item){
        console.time("StoreParse");
    });
    store.attachEvent("onParse", function(item){
        console.timeEnd("StoreParse");
    });


    Аналогом события onBeforeParse в datastore является событие onBeforeParse в Gantt.
  • onParse (data) - вызывается после разбора данных (они становятся доступными для API), но до их отображения в диаграмме Gantt
    • data - (Array <any>) - массив с загруженными данными
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onBeforeParse", function(item){
        console.time("StoreParse");
    });
    store.attachEvent("onParse", function(item){
        console.timeEnd("StoreParse");
    });


    Аналогом события onParse в datastore является событие onParse в Gantt.
  • onBeforeUpdate (id, item) - вызывается перед обновлением элемента
    • id - (string | number) - id элемента
    • item - (object) - новый (обновленный) объект элемента
    Возвращает false для предотвращения стандартного действия события, иначе true.
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onBeforeUpdate", function(id, item){
        // ваш код здесь
        return true;
    });


    Аналогами события onBeforeUpdate в datastore являются события onBeforeTaskUpdate и onBeforeLinkUpdate в Gantt.
  • onAfterUpdate (id, item) - вызывается после обновления элемента
    • id - (string | number) - id элемента
    • item - (object) - объект элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onAfterUpdate", function(id, item){
        // ваш код здесь
    });


    Аналогами события onAfterUpdate в datastore являются события onAfterTaskUpdate и onAfterLinkUpdate в Gantt.
  • onBeforeDelete (id, item) - вызывается перед удалением элемента
    • id - (string | number) - id элемента
    • item - (object) - объект элемента
    Возвращает false для предотвращения стандартного действия события, иначе true.
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onBeforeDelete", function(id, item){
        // ваш код здесь
        return true;
    });


    Аналогами события onBeforeDelete в datastore являются события onBeforeTaskDelete и onBeforeLinkDelete в Gantt.
  • onAfterDelete (id, item) - вызывается после удаления элемента
    • id - (string | number) - id элемента
    • item - (object) - объект элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onAfterDelete", function(id, item){
        // ваш код здесь
    });


    Аналогами события onAfterDelete в datastore являются события onAfterTaskDelete и onAfterLinkDelete в Gantt.
  • onBeforeAdd (id, item) - вызывается перед добавлением нового элемента в datastore
    • id - (string | number) - id элемента
    • item - (object) - объект элемента
    Возвращает false для предотвращения стандартного действия события, иначе true.
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onBeforeAdd", function(id, item){
        // ваш код здесь
        return true;
    });


    Аналогами события onBeforeAdd в datastore являются события onBeforeTaskAdd и onBeforeLinkAdd в Gantt.
  • onAfterAdd (id, item) - вызывается после добавления элемента в datastore
    • id - (string | number) - id элемента
    • item - (object) - объект элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onAfterAdd", function(id, item){
        // ваш код здесь
    });


    Аналогами события onAfterAdd в datastore являются события onAfterTaskAdd и onAfterLinkAdd в Gantt.
  • onIdChange (id, newId) - вызывается, когда id элемента изменяется
    • id - (string | number) - id элемента
    • newId - (string | number) - новый id элемента
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onIdChange", function(oldId, newId){
        // ваш код здесь
    });


    Аналогом события onIdChange в datastore является событие onTaskIdChange в Gantt.
  • onClearAll () - вызывается после удаления всех элементов из datastore
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onClearAll", function(){
        // ваш код здесь
    });

    Аналогом события onClearAll в datastore является событие onClear в Gantt.
  • onBeforeStoreUpdate (id, item, action) - вызывается перед обновлением datastore
    • id - (string | number | null) - id элемента или null
    • item - (object | null) - объект элемента или null
    • action - (string | null) - тип действия ("paint", "move", "add", "delete", null)
    Возвращает false для предотвращения стандартного действия события, иначе true.
    Это событие сигнализирует о необходимости перерисовки элементов datastore. Значение аргумента `null` означает, что обновляется весь datastore.
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onBeforeStoreUpdate", function(id, item, action){
        // ваш код здесь
        return true;
    });

  • onStoreUpdated (id, item, action) - вызывается после обновления datastore
    • id - (string | number | null) - id элемента или null
    • item - (object | null) - объект элемента или null
    • action - (string | null) - тип действия ("paint", "move", "add", "delete", null)
    Это событие сигнализирует о необходимости перерисовки элементов datastore. Значение аргумента `null` означает, что обновляется весь datastore.
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onStoreUpdated", function(id, item, action){
        // ваш код здесь
    });

  • onBeforeFilter () - вызывается перед применением фильтрации
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onBeforeFilter", function(){
        console.time("filtering");
    });
    store.attachEvent("onFilter", function(){
        console.timeEnd("filtering");
    });

  • onFilter () - вызывается после обновления состояния фильтрации в datastore
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onBeforeFilter", function(){
        console.time("filtering");
    });
    store.attachEvent("onFilter", function(){
        console.timeEnd("filtering");
    });

  • onFilterItem (id, item) - вызывается для каждого элемента на этапе фильтрации, возвращение `false` пометит элемент как невидимый
    • id - (string | number) - id элемента
    • item - (object) - объект элемента
    Возвращает false для предотвращения стандартного действия события, иначе true.
    var store = gantt.getDatastore(gantt.config.resource_store);
    store.attachEvent("onFilterItem", function(id, item){
        // ваш код здесь
        return true;
    });

    Аналогом события onFilterItem в datastore является событие onBeforeTaskDisplay в Gantt.
  • onDestroy () - вызывается после вызова метода destructor() у datastore
    var datastore = gantt.createDatastore({
        name: gantt.config.resource_store,
        type: "treeDatastore",
        initItem: function (item) {
            item.parent = item.parent || gantt.config.root_id;
            item[gantt.config.resource_property] = item.parent;
            item.open = true;
            return item;
        }
    });
     
    datastore.attachEvent("onDestroy", function(){
        alert("free custom resources");
    });
     
    datastore.destructor();

See also
К началу