我是微风的新手,这看起来像一个小虫,但我想在这里问我以防万一我不知道。
设置加载元数据:
var metadataStore = new breeze.MetadataStore();
metadataStore.importMetadata(metadata);
queryOptions = new breeze.QueryOptions( {
fetchStrategy: breeze.FetchStrategy.FromLocalCache
});
mgr = new breeze.EntityManager({
serviceName: 'breeze',
metadataStore: metadataStore,
queryOptions: queryOptions
});
明确执行本地查询:
var q = breeze.EntityQuery.from("Boards")
.toType('Board')
.where('isImplicit', 'equals', withImplicits)
.orderBy('name');
return manager.executeQueryLocally(q) // returns result
但使用query.using
并不是:
var q = breeze.EntityQuery.from("Boards")
.toType('Board')
.where('isImplicit', 'equals', withImplicits)
.orderBy('name');
q = q.using(breeze.FetchStrategy.FromLocalCache)
return manager.executeQuery(q)
更新:为了澄清,上面在尝试fetchMetdata并且没有要获取的端点时抛出错误。如果我修补下面的代码,它工作正常。似乎数据服务.hasServerMetadata
,您不需要获取它。我正在为一个微风适配器创建测试工具,所以我希望能够在没有后端的情况下运行
在EntityManager中看起来问题是this line:
if ( (!dataService.hasServerMetadata ) || this.metadataStore.hasMetadataFor(dataService.serviceName)) {
promise = executeQueryCore(this, query, queryOptions, dataService);
} else {
var that = this;
promise = this.fetchMetadata(dataService).then(function () {
return executeQueryCore(that, query, queryOptions, dataService);
});
}
我认为行应该是if( dataService.hasServerMetadata || ...
,但对于Breeze的新手,我想在开始GH问题之前问这里。
答案 0 :(得分:0)
EntityManager.executeQueryLocally 是一个同步函数,您可以立即使用其结果。即。
var myEntities = myEntityManager.executeQueryLocally(myQuery);
而 EntityManager.executeQuery 是一个异步函数(即使查询具有指定这是本地查询的'using'调用)。所以你需要这样称呼它:
var q2 = myQuery.using(breeze.FetchStrategy.FromLocalCache);
myEntityManager.executeQuery(q2).then(function(data) {
var myEntities = data.results;
});
这背后的想法是,使用 executeQuery ,您可以以完全相同的方式处理所有查询,即异步处理,无论它们是否实际上是异步的。
如果您想创建一个不向服务器提供元数据的EntityManager,您可以执行以下操作:
var ds = new breeze.DataService({
serviceName: "none",
hasServerMetadata: false
});
var manager = new breeze.EntityManager({
dataService: ds
});