阻止 breeze.js 在数组对象上创建可观察属性
Preventing breeze.js from creating observables properties on array objects
我一定是遗漏了一些简单的东西,但无法弄清楚。我正在 1 个 Web API 调用中检索一堆查找 tables。
return EntityQuery.from('Lookups')
.noTracking(true)
.using(manager).execute()
.then(processLookups);
在 processLookups 中,我为返回的每个数组调用 getLocal。示例:状态 table
datacontext.lookups = {
state: getLocal('States', orderBy.state, true),
....
}
function getLocal(resource, ordering, includeNullos) {
var query = EntityQuery.from(resource)
.orderBy(ordering)
.noTracking(true);
if (!includeNullos) {
query = query.where('id', '!=', 0);
}
return manager.executeQueryLocally(query);
}
数组是不可观察的,但数组对象中的每个属性都是可观察的函数。这只是我不需要的开销,因为这些不会改变。
如何防止对象属性被观察到?
谢谢
我不确定我是否完全理解这种情况,但 'noTracking' 选项实际上只与 'remote' 查询相关。即不是本地的。基本上,'noTracking' 告诉 breeze 不要将查询结果处理成 breeze 实体,也不要缓存这些结果。
当您查询缓存时,这就是 'executeQueryLocally' 正在做的事情,这两个步骤都已经发生,所以 'noTracking' 被忽略了。
您可以在查询的成功回调中使用原始查找。没有理由查看缓存......即使它们在那里(它们并不像 Jay 所说的那样)。
但是你会用这些查找做什么?大概您希望它们与真实实体相关(通过 Breeze 导航路径)。例如,您想要 session.room
到 return 相关的房间对象。但是,如果房间是您的查找对象之一并且不是实体,那么 session.room
导航 属性 不会 return 它;导航属性总是 return 个实体。
我可以想办法解决这个问题。但这只是更多的工作和更多的诡计。
让我们停下来问最重要的问题:为什么?
为什么要关心查找是否是具有可观察属性的实体?它可能是“你不需要的开销”。但是 开销会伤害到您 吗?疼你怎么办?你量过吗?
请原谅我,但我感觉到过早的优化可能会分散您对更有价值的追求的注意力。很高兴被证明是错误的。
我一定是遗漏了一些简单的东西,但无法弄清楚。我正在 1 个 Web API 调用中检索一堆查找 tables。
return EntityQuery.from('Lookups')
.noTracking(true)
.using(manager).execute()
.then(processLookups);
在 processLookups 中,我为返回的每个数组调用 getLocal。示例:状态 table
datacontext.lookups = {
state: getLocal('States', orderBy.state, true),
....
}
function getLocal(resource, ordering, includeNullos) {
var query = EntityQuery.from(resource)
.orderBy(ordering)
.noTracking(true);
if (!includeNullos) {
query = query.where('id', '!=', 0);
}
return manager.executeQueryLocally(query);
}
数组是不可观察的,但数组对象中的每个属性都是可观察的函数。这只是我不需要的开销,因为这些不会改变。
如何防止对象属性被观察到?
谢谢
我不确定我是否完全理解这种情况,但 'noTracking' 选项实际上只与 'remote' 查询相关。即不是本地的。基本上,'noTracking' 告诉 breeze 不要将查询结果处理成 breeze 实体,也不要缓存这些结果。
当您查询缓存时,这就是 'executeQueryLocally' 正在做的事情,这两个步骤都已经发生,所以 'noTracking' 被忽略了。
您可以在查询的成功回调中使用原始查找。没有理由查看缓存......即使它们在那里(它们并不像 Jay 所说的那样)。
但是你会用这些查找做什么?大概您希望它们与真实实体相关(通过 Breeze 导航路径)。例如,您想要 session.room
到 return 相关的房间对象。但是,如果房间是您的查找对象之一并且不是实体,那么 session.room
导航 属性 不会 return 它;导航属性总是 return 个实体。
我可以想办法解决这个问题。但这只是更多的工作和更多的诡计。
让我们停下来问最重要的问题:为什么?
为什么要关心查找是否是具有可观察属性的实体?它可能是“你不需要的开销”。但是 开销会伤害到您 吗?疼你怎么办?你量过吗?
请原谅我,但我感觉到过早的优化可能会分散您对更有价值的追求的注意力。很高兴被证明是错误的。