Jaydata作为KendoDataSource不会自动刷新新记录添加

时间:2015-04-19 09:46:52

标签: kendo-ui kendo-grid jaydata

我使用jaydata来管理仅限客户端的数据存储。数据通过SignalR Broadcast接收。接收的数据缓冲在内存中。一秒钟后,内存缓冲区被刷新到jaydata存储并保存。

绑定到jaydata商店的Kendo Grid不会自动更新。一旦jaydata saveChanges方法完成,我需要在dataSource上调用read方法。下面的代码是计时器触发时调用的方法。

$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(); });
        }
    }
};

在我的Kendo Grid中,我已经将dataSource定义如下:

    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" });

我期待网格绑定数据源自动检测底层数据存储已更改。

是否需要强制数据源读取?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

预计不会检测到这些变化。这与将网格连接到服务器的行为相同,您不会收到更改通知。您可以自己构建轮询或推送通知。

JayData确实为您可以挂钩的数据更改提供事件,例如我经常使用

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

如果您可以告诉您的网格数据源重新加载。但请确保用户当前没有编辑某些内容......我相信这就是为什么JayData不强制重新加载的原因,因为他们无法确定用户是否正在执行某些操作网格。

玩得开心,JayData和剑道有点不稳定的婚姻。 :)