我使用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" });
我期待网格绑定数据源自动检测底层数据存储已更改。
是否需要强制数据源读取?
提前感谢您的帮助。
答案 0 :(得分:0)
预计不会检测到这些变化。这与将网格连接到服务器的行为相同,您不会收到更改通知。您可以自己构建轮询或推送通知。
JayData确实为您可以挂钩的数据更改提供事件,例如我经常使用
context.Dogs.addEventListener('afterUpdate', function(){ alert('doggy updated'); });
如果您可以告诉您的网格数据源重新加载。但请确保用户当前没有编辑某些内容......我相信这就是为什么JayData不强制重新加载的原因,因为他们无法确定用户是否正在执行某些操作网格。
玩得开心,JayData和剑道有点不稳定的婚姻。 :)