BaseDataSource

Функция-конструктор, определяющий базовый тип источников данных.

Description

Источники данных, представленные в InfinniUI, являются потомками BaseDataSource. В BaseDataSource реализованы базовые API, которые предоставлят все источники данных InfinniUI.

Syntax

new BaseDataSource(parameters)

Parameters

Name Type Description
parameters Object Объект с параметрами представления. Один из параметров обязательный: parameters.view - родительское представление источника данных

Properties

Name Type Description
name String Содержит наименование источника данных
onProviderErrorHandler Script Содержит обработчик события о том, что поставщик данных вернул ошибку

Specific Properties

Для работы с данными свойствами используйте методы getProperty и setProperty. Обратите внимание, что для работы с данными свойствами необходимо указывать точку в названии.

Name Description
items Список элементов источника данных
selectedItem Выделенный элемент
filter Правило фильтрации документов
filterParams Параметры фильтра
search Строка полнотекстового поиска

Methods

Name Description
getView Возвращает родительское представление
getContext Возвращает контекст родительского представления
getName Возвращает наименование источника данных
setName Устанавливает наименование источника данных
suspendUpdate Запрещает обновление списка элементов
resumeUpdate Разрешает обновление списка элементов
isUpdateSuspended Возвращает значение, указывающее, запрещено ли обновление списка элементов
updateItems Обновляет список элементов источника данных
tryInitData Пытается обновить список элементов источника. Делает это только в случае, если до этого источник не был прогружен данными
isDataReady Возвращает значение, указывающее, загрузились ли данные в источник или нет
getItems Возвращает список элементов источника данных
createItem Создает новый элемент в источнике данных
saveItem Сохраняет элемент в источнике данных
deleteItem Удаляет элемент из источника данных
getSelectedItem Возвращает выделенный элемент
setSelectedItem Устанавливает выделенный элемент
getProperty Возвращает значение указанного свойства источника
setProperty Устанавливает значение указанного свойства источника
isLazy Возвращает значение, является ли прогрузка данных в источнике “ленивой” или нет
setIsLazy Устанавливает значение, является ли прогрузка данных в источнике “ленивой” или нет
isModified Проверяет, является ли элемент несохраненным
isModifiedItems Проверяет, есть ли несохраненные элементы
getFilter Возвращает правило фильтрации документов
setFilter Устанавливает правило фильтрации документов
getFilterParams Возвращает параметры фильтра
setFilterParams Устанавливает параметры фильтра
getSearch Возвращает строку полнотекстового поиска
setSearch Устанавливает строку полнотекстового поиска
getIdProperty Возвращает наименование свойства с идентификатором элемента (по умолчанию Id)
setIdProperty Устанавливает наименование свойства с идентификатором элемента
idOfItem Возвращает значение идентификатора по переданному элементу item
getFillCreatedItem Возвращает, нужно ли предзаполнение новых элементов на сервере
setFillCreatedItem Устанавливает, нужно ли предзаполнение новых элементов на сервере
getErrorValidator Возвращает функцию проверки элемента на ошибки
setErrorValidator Устанавливает функцию проверки элемента на ошибки
getValidationResult Возвращает результат проверки на ошибки
initDataProvider Определяет обязательное свойство dataProvider. Наследники BaseDataSource должны переопределять этот метод!
beforeDeleteItem Вы можете переопределить этот метод в наследнике BaseDataSource, если есть необходимость выполнять некие действия перед удалением элемента

Events

Name Description
onSelectedItemChanged станавливает обработчик события о том, что выделенный элемент изменился
onPropertyChanged Устанавливает обработчик события о том, что одно из свойств источника изменилось
onItemCreated Устанавливает обработчик события о том, что элемент создан
onItemSaved Устанавливает обработчик события о том, что элемент сохранен
onItemDeleted Устанавливает обработчик события о том, что элемент удален
onItemsUpdated Устанавливает обработчик события о том, что список элементов обновлен
onErrorValidator Устанавливает обработчик события о том, что произошла ошибка валидации
onProviderError Устанавливает обработчик события о том, что поставщик данных вернул ошибку

BaseDataSource.metadata

Метаданные базового типа источников данных представления.

Properties

Name Type Default Description
Name String Наименование источника данных
SuspendUpdate String Причина запрета на обновление списка элементов. Для снятия запрета необходимо воспользоваться методом resumeUpdate().
Filter String1 Правило фильтрации документов
FilterParams Object Объект со значениями параметров. Параметр может быть задан как DataBinding.
Search String Строка полнотекстового поиска
IdProperty String ‘_id’ Свойство с идентификатором элемента
FillCreatedItem Boolean true Логическое значение, указывающее, нужно ли предзаполнение новых элементов на сервере
IsLazy Boolean true Логическое значение, определяющее, будет ли прогрузка данных в источнике “ленивой” или нет
ResolvePriority Integer 0 Приоритет прогрузки источника данных. Чем выше приоритет, тем раньше источник будет прогружен
ValidationErrors Script Функция проверки элемента на ошибки
CustomProperties Object Вспомогательные параметры. Могут пригодиться, например, для настройки взаимодействия DataNavigation и RestDataSource. Объект является ассоциативным массивом, в котором key - это название свойства, а value - значение.
OnErrorValidator Script Обработчик события о том, что проверка на ошибки завершена
OnSelectedItemChanged Script Обработчик события о том, что выделенный элемент изменился
OnPropertyChanged Script Обработчик события о том, что одно из свойств источника изменилось
OnItemDeleted Script Обработчик события о том, что элемент удален
OnItemsUpdated Script Обработчик события о том, что список элементов обновлен
OnProviderError Script Обработчик события о том, что поставщик данных вернул ошибку

1 Шаблонизируемая величина. Заполняется значениями из FilterParams.

Exampes

Создать экземпляр BaseDataSource нельзя (это абстрактный класс), однако можно создать ObjectDataSource, который наследуется от BaseDataSource.

{
    "ObjectDataSource": {
        "Name": "DocumentTypes",
        "IdProperty": "guid",
        "IsLazy": false,
        "ValidationErrors": "{ return { IsValid: (args.Name != null), Items: [{Message: 'Name is required'}] }; }",
        "OnPropertyChanged": "{ alert('Property ' + args.property + ' is changed!'); }"
    }
}

Допустим возникла зависимость между источниками данных, и для корректной работы MainDataSource необходим загруженный TerminologyDataSource. Для решения этой проблемы достаточно указать ResolvePriority для TerminologyDataSource выше, чем для MainDataSource.

{
    "DataSources": [
        {
            "DocumentDataSource": {
                "Name": "MainDataSource",
                "ConfigId": "configuration",
                "DocumentId": "patients",
                "SuspendUpdate": "SomeReason",
                "Filter": "gt(Birthday,<%startDate%>)",
                "FilterParams": {
                    "startDate": "date('1985-01-01')"
                }
            }
        },
        {
            "DocumentDataSource": {
                "Name": "TerminologyDataSource",
                "ConfigId": "configuration",
                "DocumentId": "diseases",
                "Search": "Иванов Иван Иванович",
                "ResolvePriority": 1
            }
        }
    ]
}

Реализация фильтра.

{
  "DataSources": [
    {
      "ObjectDataSource": {
        "Name": "ObjectDataSource",
        "Items": [
          {"_id": 1, "Name": "Mobile small", "currency": 1100, "Display": "480x320"},
          {"_id": 2, "Name": "Mobile middle", "currency": 1200, "Display": "640x320"},
          {"_id": 3, "Name": "Mobile large", "currency": 1300, "Display": "771x375"},
          {"_id": 4, "Name": "Tablet", "currency": 1400, "Display": "960x480"},
          {"_id": 5, "Name": "Desktop small", "currency": 1500, "Display": "1024x768"},
          {"_id": 6, "Name": "Desktop middle", "currency": 1600, "Display": "1600x900"},
          {"_id": 7, "Name": "Desktop", "currency": 2000, "Display": "1920x1080"}
        ],
        "Filter": "and(contains(Name, <%filterName%>),contains(currency, <%filterPrice%>),contains(Display, <%filterDisplay%>))",
        "FilterParams": {
          "filterName": {
            "Source": "ObjectDataSource2",
            "Property": "$.FilterName"
          },
          "filterPrice": {
            "Source": "ObjectDataSource2",
            "Property": "$.FilterPrice"
          },
          "filterDisplay": {
            "Source": "ObjectDataSource2",
            "Property": "$.FilterDisplay"
          }
        }
      }
    },
    {
      "ObjectDataSource": {
        "Name": "ObjectDataSource2",
        "Items": [
          {"_id": 1, "FilterName": "", "FilterPrice": "", "FilterDisplay": ""}
        ]
      }
    }
  ]
}

Пример заморозки DataSource из метаданных

{
  "DataSources": [
    {
      "ObjectDataSource": {
        "Name": "ObjectDataSource",
        "SuspendUpdate": "SomeReason",
        "Items": []
      }
    }
  ]
}

Пример настройки RestDataSource для работы с DataNavigation

{
  "RestDataSource": {
    "Name": "MainDataSource",
    "CustomProperties": {
      "pageNumber": 0,
      "pageSize": 20
    },
    "GettingParams": {
      "Origin": "http://localhost:9900",
      "Method": "post",
      "Params": {
        "skip": {
          "Source": "MainDataSource",
          "Property": ".pageNumber",
          "Converter": {
            "ToElement": "{return args.source.getProperty('.pageSize') * args.value;}"
          },
          "DefaultValue": 0
        },
        "take": {
          "Source": "MainDataSource",
          "Property": ".pageSize",
          "DefaultValue": 20
        }
      },
      "Path": "/documents/PublicationInfo?skip=<%skip%>&take=<%take%>&count=true",
      "Data": {}
    },
    "UpdatingItemsConverter": "{args.source.setProperty('.totalCount', args.value.Result.Count); return args.value.Result.Items;}"
  }
}