【问题标题】:breeze: querying local cache when using client-side model微风:使用客户端模型时查询本地缓存
【发布时间】:2014-11-26 21:38:54
【问题描述】:

考虑下面的代码。从服务器获取数据时它工作正常。我有一个自定义数据适配器 (staffManagemetnService),它根据服务器返回的 json 创建客户端实体。

但是,如果我调用 executeQueryLocally,它会失败并引发以下异常:Cannot find an entityType for resourceName: 'GetInternalResourcesByCompetence'. Consider adding an 'EntityQuery.toType' call to your query or calling the MetadataStore.setEntityTypeForResourceName method to register an entityType for this resourceName

        var query = breeze.EntityQuery.from('GetInternalResourcesByCompetence').withParameters(parameters);

        var result = self.manager.executeQueryLocally(query.using(dataService.staffManagementService));
        if (result) {
            return $q.resolve(result);
        } else {
            return this.manager.executeQuery(query.using(dataService.staffManagementService))
                .then(function (data) {
                    return data.results;
                })
               .catch(function (err) {
                   logError('Restrieving resources days off failed', err, true);
               });
        }

我不确定这意味着什么。既然我特别要求微风使用自定义 dataAdapter,它是否应该开箱即用?

【问题讨论】:

    标签: breeze


    【解决方案1】:

    区分资源名称和实体类型名称很重要。资源名称通常是端点的一部分并且是复数形式(例如orders)。类型名称通常是单数(例如order)。

    本地微风不能对资源名称做太多事情,因为它不会调用端点。相反,您需要一个特定的实体类型名称。

    您可以使用setEntityTypeForResourceName 函数将实体类型映射到资源名称:

    metadataStore.setEntityTypeForResourceName('Speakers', 'Person');
    

    请参阅“资源名称不是实体类型名称”一章以及此处的以下章节:http://www.getbreezenow.com/documentation/querying-locally

    【讨论】:

    • 是的,你说得对。最后,我从缓存中检索了实体,然后使用简单的过滤器函数过滤掉了结果。但是不能使用 withParams 应用过滤器。
    猜你喜欢
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2020-01-23
    • 2021-12-16
    • 2012-11-15
    • 2022-08-20
    • 2017-10-05
    • 1970-01-01
    相关资源
    最近更新 更多