我对使用telerik appbuilder开发移动应用程序非常陌生。从Everlive获取数据时,有些事情我很难理解。
让我们考虑一个简单的例子。比方说,我有博客文章和评论,属于这些文章。帖子和评论都是由用户制作的。
在一个视图中,我想向帖子提供相应的评论,我还需要发布评论的用户的用户名(评论表只包含userId)。
帖子和评论都很容易获取,因为我有帖子的id。但是,如何为每个Comment获取相应的用户呢?
FriendsApp的例子做了一些非常相似的事情,但它使用这一行来获取用户:
var user = $.grep(app.Users.users(), function (e) {
return e.Id === userId;
})[0];
这会获取所有用户并在客户端对其进行筛选吗?我想这是可以的,如果你有大约10个用户。但如果你有一百万用户呢?
我猜FriendsApp使用这种方式来解析关系只是为了保持示例的简单性。Everlive为解决关系字段提供了一个更有意义的工具集,名为Expand。您可以在这里探索REST API:
http://docs.telerik.com/platform/backend-services/development/rest-api/relations/simple-expanding
或者这里的JS SDK函数:
http://docs.telerik.com/platform/backend-services/development/javascript-sdk/relations/simple-expanding.
由于Friends应用程序使用Kendo UI数据源组件,您可以在请求中发送一个扩展头。数据源的以下配置将返回每个活动/注释实体中用户的DisplayName:
var expandObject = {
"CreatedBy": {
"ReturnAs": "User",
"SingleField": "DisplayName"
}
};
var dataSource = new kendo.data.DataSource({
type: "everlive",
transport: {
typeName: 'Activities', // replace this with Comments
read: {
beforeSend: function (xhr) {
xhr.setRequestHeader("X-Everlive-Expand", JSON.stringify(expandObject))
},
}
},
schema: {
model: {
id: Everlive.idField
}
}
});
dataSource.fetch(function (data) {
console.log(data.items);
});
同样可以应用于解决每个博客文章的评论。考虑到Friends数据模式,您将需要使用Everlive API的外部关系解析程序。请注意,它仅在GetById场景中可用,例如,当按Id检索活动时,您可以解析指向该活动的注释,这在主详细信息视图中通常非常方便。