【问题标题】:Preventing breeze.js from creating observables properties on array objects防止微风.js 在数组对象上创建 observables 属性
【发布时间】:2015-02-18 21:30:53
【问题描述】:

我一定错过了一些简单的东西,但无法弄清楚。我在 1 个 Web API 调用中检索了一堆查找表。

return EntityQuery.from('Lookups')
       .noTracking(true)
       .using(manager).execute()
       .then(processLookups);

在 processLookups 中,我为返回的每个数组调用 getLocal。示例:状态表

 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);
}

数组是不可观察的,但数组对象中的每个属性都是可观察的函数。这只是我不需要的开销,因为这些不会改变。

如何防止对象属性被观察到?

谢谢

【问题讨论】:

    标签: properties breeze observable


    【解决方案1】:

    您可以在查询的成功回调中使用原始查找。没有理由查看缓存......即使他们在那里(他们不是 Jay 说清楚的)。

    但是您将如何处理这些查找?大概您希望它们(通过 Breeze 导航路径)与真实实体相关联。例如,您希望session.room 返回相关的房间对象。但是,如果房间是您的查找对象之一并且不是实体,那么 session.room 导航属性将不会返回它; nav 属性总是返回实体。

    我可以想办法解决这个问题。但这只是更多的工作和更多的诡计。

    让我们停下来问最重要的问题:为什么?

    您为什么要关心查找是否是具有可观察属性的实体?它可能是“您不需要的开销”。但它开销会伤害你吗?怎么疼你?你量过吗?

    请原谅我,但我感觉到过早的优化可能会分散您对更有价值的追求的注意力。很高兴被证明是错误的。

    【讨论】:

    • 我明白你所说的不跟踪是什么意思。我只是想使用 John Papa 的 CodeCamper Jump Start 应用程序并对其进行调整,认为 noTracking 是我所需要的。 (除了 noTracking,上面的代码直接来自他的例子)。你是对的,原始 JSON 在回调中可用,我可以使用这些数组。 “作为函数的属性”根本没有伤害,但在这种情况下,它们不会增加任何好处(即导航属性)。谢谢大家。
    【解决方案2】:

    我不确定我是否完全理解这种情况,但“noTracking”选项实际上只与“远程”查询相关。即不是本地的。基本上,“noTracking”告诉微风不要将查询结果处理成微风实体,并且不要缓存这些结果。

    当您查询缓存时,即“executeQueryLocally”正在执行的操作,这两个步骤都已经发生,因此“noTracking”被忽略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多