使用kendo ui数据源获取多个级别的对象?

时间:2014-09-07 10:20:13

标签: kendo-ui telerik telerik-appbuilder everlive

我很擅长使用telerik appbuilder开发移动应用程序。从Everlive获取数据时,我很难理解一些事情。

让我们考虑一个简单的例子。假设我有属于这些帖子的博客帖子和评论。帖子和评论都是由用户制作的。

在一个视图中,我想要使用相应的评论来呈现帖子,我还需要发布评论的用户的用户名(评论表仅包含userId)。

由于我有Post的id,所以Post和Comments都很容易获取。但是,如何为每个评论获取相应的用户?

FriendsApp示例执行的操作非常相似,但它使用此行来获取用户:

var user = $.grep(app.Users.users(), function (e) {
   return e.Id === userId;
})[0];

这会抓取所有用户并过滤客户端吗?如果您有10个用户,我想这没关系。但是,如果你有一百万用户怎么办?

1 个答案:

答案 0 :(得分:1)

我猜测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数据源组件,您可以发送包含请求的Expand标头。以下数据源配置将返回每个Activity / Comments实体中用户的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的External Relation解析器。请注意,它仅在GetById方案中可用,例如通过Id检索活动时,您可以解析指向此活动的注释,这在主 - 详细信息视图中通常非常方便。