【问题标题】:Breeze how to use client side property in Where clause微风如何在 Where 子句中使用客户端属性
【发布时间】:2014-05-05 14:42:38
【问题描述】:

我只有客户端 Metadatstore:

initialize = (metadataStore) => {
    metadataStore.addEntityType({
        shortName: "AppsListHelper",
        namespace: NFL.settings.entityNamespace,
        dataProperties: {
            Path: { dataType: "String" },
            Title: { dataType: "String", isPartOfKey: true },
            Author: { dataType: "String" },
            Description: { dataType: "String" },
            ImageUrl: { dataType: "String" },
            IsFavourite: { dataType: "Boolean" },
            AppTypeName: { dataType: "String", isPartOfKey: true },
            Departments: { dataType: "String" },
            AlwaysShownTo: { dataType: "String" },
            AvailableTo: { dataType: "String" },
            HasAccess: { dataType: "Boolean" },
            Keywords: { dataType: "String" }
        }
    });

    metadataStore.registerEntityTypeCtor('AppsListHelper', function () { this.IsMyApp = ko.observable(false); });
}

我想添加其他属性“IsMyApp”,仅用于客户端使用 - 在我的一种 GET 方法中,我将此属性设置为“true”:

    querySucceded = (data) => {   
    ko.utils.arrayForEach(data.results, (item: m_application.Application) => {
        item.IsMyApp(true);
    });
    return this.apps(data.results);
}

现在我尝试通过微风管理器查询本地数据,使用查询:

private getLocal = (resource) => {
    var query = this.EntityQuery.from(resource).where('IsMyApp', '==', 'true').toType("AppsListHelper");
    return this.breezeManager.executeQueryLocally(query);
}

但没有任何反应(视图已加载但为空白),删除“where 子句”的行后,它返回所有数据。

任何帮助将不胜感激:)

我更详细的场景如下:我有 2 个视图:“我的应用程序”和“所有应用程序”。由于所有实体都是相同类型的“AppsListHelper”,因此在我从服务器接收到带有数据的两个列表后,它们会一起缓存 - 当从本地缓存中提取时,这会导致相同的数据显示在两个视图上(我理解它)。因此,作为第一个解决方案,我只想在客户端添加额外的标志“IsMyApp”,因为我真的不需要在服务器上使用它,并根据该标志的值区分数据以获得适当的视图。

【问题讨论】:

  • 我在帖子中添加了更多细节。谢谢!

标签: typescript breeze


【解决方案1】:

@PKad 是正确的,Breeze 查询忽略了无法识别的属性。您可以按照他的建议过滤缓存查询结果。

未映射的属性是另一个需要考虑的选项。未映射的属性是“Breeze 已知的”,但未映射到您的数据库,也不会保留在服务器上。这是一个仅限客户端的扩展。

您可以在客户端上定义元数据时定义未映射的属性,也可以在自定义构造函数中定义它并将其注册到类型中。

然后就可以按照DocCode:entityExtensionTests测试中所示查询,"can query an unmapped property with cache query"

【讨论】:

    【解决方案2】:

    您只能为 Breeze 知道的属性创建查询。在您的情况下,您将属性添加到构造函数中,但 Breeze 并不真正知道您正在执行此操作,只是允许您使用一种方法来执行此操作。 (如果这有任何意义)

    您可能只是想过滤数组,那么为什么不查询满足其他条件的对象,然后过滤它们呢?这可能不是有效的 TypeScript,但应该向您展示正确的方式 -

    var filteredResults = ko.utils.arrayFilter(data.results, function (result) {
        return result.IsMyApp() === true;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-31
      • 2019-06-10
      • 1970-01-01
      • 2017-07-13
      • 2020-09-18
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      相关资源
      最近更新 更多