Jaydata как KendoDataSource не обновляется автоматически при добавлении новой записи

Я использую jaydata для управления хранилищем данных только для клиентов. Данные принимаются через широковещательную рассылку SignalR. Полученные данные буферизируются в памяти. Раз в секунду буфер памяти сбрасывается в хранилище jaydata и сохраняется.

Kendo Grid, привязанный к хранилищу jaydata, не обновляется автоматически. Мне нужно вызвать метод чтения для источника данных после завершения метода jaydata saveChanges. Код ниже — это метод, который вызывается при срабатывании таймера.

$scope.updateGrid = function () {
    if ($scope.allowUpdate) {
        var data = $scope.scribeMessages.splice(0, $scope.scribeMessages.length);
        if (data.length > 0) {
            scribeDb.Messages.addMany(data);
            scribeDb.saveChanges().then(function () { $scope.scribeGrid.dataSource.read(); });
        }
    }
};

В моей сетке кендо я определил источник данных следующим образом:

    dataSource: scribeDb.Messages.asKendoDataSource({
        pageSize: 20,
        sort: [{ field: "SequenceId", dir: "desc" }]
    })

Я определил сущность, набор сущностей и обозначение как:

$data.Entity.extend("ScribeMessage", {
    SequenceId: { type: "string", required: true, key: true, computed: false },
    ScribeId: { type: "string", required: true },
    Environment: { type: "string", required: true },
    LogLevel: { type: "integer", required: true },
    Program: { type: "string", required: true },
    Subject: { type: "string", required: false },
    Message: { type: "string", required: false },
    MachineName: { type: "string", required: true },
    InstanceId: { type: "string", required: false },
    ComponentId: { type: "string", required: false },
    Exception: { type: "string", reguired: false },
    ServerTime: { type: "date", required: true },
    ClientTime: { type: "date", required: true },
    User: { type: "string", required: true }
});

$data.EntityContext.extend("ScribeDatabase", {
    Messages: { type: $data.EntitySet, elementType: ScribeMessage }
});

var scribeDb = new ScribeDatabase({ provider: "indexedDb", databaseName: "ScribeMessages" });

Я ожидал, что источник данных, привязанный к сетке, автоматически обнаружит, что базовое хранилище данных изменилось.

Ожидается ли принудительное чтение источника данных?

Спасибо заранее за вашу помощь.


person mhsimkin    schedule 19.04.2015    source источник


Ответы (1)


Обнаружение изменений не ожидается. Это то же самое поведение, как если бы ваша сетка была подключена к серверу, вы не были бы уведомлены об изменениях. У вас либо есть встроенный опрос, либо собственное push-уведомление.

JayData предоставляет события при изменении данных, к которым вы можете подключиться, например, я часто использую

context.Dogs.addEventListener('afterUpdate', function(){ alert('doggy updated'); });

В случае, если вы можете указать источнику данных вашей сетки перезагрузить. Но убедитесь, что пользователь в данный момент ничего не редактирует... Я считаю, что именно поэтому JayData не вызывает перезагрузку, поскольку они не могут быть уверены, что пользователь не выполняет какие-либо действия в сетке.

Получайте удовольствие, JayData и Kendo — это немного изменчивый брак. :)

person sheamus    schedule 29.05.2015