Typescript 如何在Where子句中使用客户端属性
我只有客户端Metadatstore:Typescript 如何在Where子句中使用客户端属性,typescript,breeze,Typescript,Breeze,我只有客户端Metadatstore: initialize = (metadataStore) => { metadataStore.addEntityType({ shortName: "AppsListHelper", namespace: NFL.settings.entityNamespace, dataProperties: { Path: { dataType: "String" },
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);
}
现在,我尝试通过breeze manager使用query查询本地数据:
private getLocal = (resource) => {
var query = this.EntityQuery.from(resource).where('IsMyApp', '==', 'true').toType("AppsListHelper");
return this.breezeManager.executeQueryLocally(query);
}
但“什么也不发生”视图已加载但为空,在“where子句”的删除行之后,它将返回所有数据
任何帮助都将不胜感激:
我更详细的场景如下:我有两个视图:“我的应用”和“所有应用”。由于所有实体都是同一类型的“AppsListHelper”,在我从服务器接收到两个包含数据的列表后,它们被缓存到一起-这导致相同的数据显示在两个视图上,这对我来说是理解的,当从本地缓存中提取时。所以,作为第一个解决方案,我只想在客户端添加额外的标志'IsMyApp',因为我在服务器上确实不需要它,并根据该标志的值来区分数据,以获得适当的视图 您只能为Breeze知道的属性创建查询。在您的情况下,您正在将属性添加到构造函数中,但Breeze并不真正知道您正在这样做,只允许您使用一个方法来完成。如果这有意义的话 您可能只是想过滤数组,那么为什么不查询满足其他条件的对象,然后过滤它们呢?这可能不是有效的TypeScript,但应该告诉您正确的方法-
var filteredResults = ko.utils.arrayFilter(data.results, function (result) {
return result.IsMyApp() === true;
});
@PKad是正确的,Breeze查询忽略无法识别的属性。您可以按照他的建议过滤缓存的查询结果
未映射的属性是另一个要考虑的选项。Breeze已知未映射属性,但未映射到数据库,因此不会在服务器上持久化。它是一个仅限客户端的扩展
可以在客户机上定义元数据时定义未映射属性,也可以在自定义构造函数中定义该属性并将其注册到类型然后,您可以在DocCode:entityExtensionTests测试中查询它。我在文章中添加了更多细节。谢谢