【问题标题】:Breeze error only when loading data via button click仅在通过按钮单击加载数据时出现微风错误
【发布时间】:2013-01-11 01:50:03
【问题描述】:

我正在使用 Breeze 将数据加载到我的应用程序中。当应用程序加载并且工作正常时,我会进行数据的初始加载。我还有一个按钮,单击该按钮应该再次获取数据。但是,当我单击该按钮时,查询失败,但错误消息是 json 数据。

这是函数的代码:

var getULSLogs = function (filters) {

    var query = entityQuery
        .from('ULSLogs')
        .orderByDesc('LogTime')
        .take(app.rowLimit);

    return manager.executeQuery(query)
        .then(querySucceeded)
        .fail(function(e) {
            alert(e);
        });

    function querySucceeded(data) {
        console.log('Query Succeeded');
        data.results.forEach(function (item) {
            vm.ulslog.logs.push(item);
        });
    }
};

由于我没有收到实际的错误消息,我不知道从哪里开始。非常感谢任何帮助。

【问题讨论】:

  • 我在尝试刷新具有关系 {User} {UserRoleMap} {Role} 的实体时遇到了同样的错误。我将错误追溯到proto.attachEntityEntityGroup。存在以下代码: if (this._entities[ix] === entity) { aspect.entityState = entityState;返回实体; } throw new Error("此密钥已附加:" + aspect.getKey());如果从服务器查询中刷新实体,我认为相等比较会失败并导致错误。

标签: knockout.js breeze


【解决方案1】:

“失败”承诺中的返回值是一个带有多个属性的 javascript 对象。根据故障,您可以通过在调试器中详细查看此对象来找到更多信息。

【讨论】:

  • 谢谢,我刚刚将错误写到控制台,它指出错误:“此密钥已附加”。现在我只需要弄清楚如何摆脱该实体并用新实体替换它。
  • 不确定是否需要。 Breeze 自动将传入实体与缓存中具有相同键的任何实体合并。任何导航属性也会更新。所以尝试删除'querySucceeded'中的'forEach'循环,你可能会发现你的集合已经更新了。
  • 我怀疑杰是正确的。如果是这样,异常将在您的 querySucceeded 方法中引发,而不是由 Breeze 引发。来自任一来源的异常都会流入您的 queryFailed。 querySucceeded 顶部的断点将解决该问题。
  • 感谢两位的回复。如果实体在那里,无论我做什么,我都会收到该错误。但是,如果我清除管理器中的所有实体,然后重新运行查询,它可以正常工作,没有问题。 @Ward 话虽如此,它没有进入 querySucceeded 方法。它总是查询失败。
  • 请原谅我说“这听起来不可能”。当然,我们在早餐前做了 6 件不可能的事情,所以谁知道呢。检查 HTTP 回复中的查询响应正文;它是否有异常或是否有 JSON 数据。如果有 JSON 数据并且它从未到达 querySucceeded 方法,则在合并到缓存期间失败。 是否可能来自服务器的实体具有重复的键值?。检查有效载荷。当经理为空时它可以工作,而当经理有实体时它会失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2013-08-22
  • 2016-04-03
  • 1970-01-01
相关资源
最近更新 更多