0

一方面我的问题非常基本,但另一方面总体情况更复杂,而且我无法真正获得任何工作样本。

我正在开发/维护一个 Web 应用程序,该应用程序目前正在从 GWT 代码库过渡到 Ember.js。

大多数较新的代码已经依赖于 Ember.js,我认为它真的很棒。问题是我们不能使用 Ember 路由器,因为所有请求都由 GWT 处理。为了使应用程序能够在这种不寻常的配置中运行,我们有特殊的 JavaScript 文件来为我们创建 Ember 主要对象(控制器和模型)。

正如您可以想象的那样,选项卡之间的导航很麻烦,并且由 GWT 处理,GWT 在需要时创建 Ember 对象。我们正在走向一个勇敢的新世界 Ember Router 和所有。

但与此同时,这是我现在面临的问题。

用户单击一个链接,该链接会打开一个页面,该页面包含一些基于 Ember 的表格。使用一些 Ajax 代码从服务器检索数据。成功后,它会生成一个 forEach 循环,该循环尝试将所有接收到的日期推送到我们基于 Ember 的组件中。

当用户在选项卡之间快速切换时,就会出现我的问题。在这种情况下,第一个对象列表还没有完成渲染,突然有一组新的对象需要处理。这会导致 Ember 抛出如下错误:“未捕获的错误:无法对不在 DOM 中的 Metamorph 执行操作。”

“未捕获的 NotFoundError:试图在不存在的上下文中引用节点。”

是否可以防止循环尝试渲染?我试过检查有问题的控制器是否已经在DOM中,有没有办法通知Ember这个对象不再有效?

对于一个冗长的问题和缺乏运行样本,我们深表歉意。

4

2 回答 2

1

我可能会将切换选项卡代码修改为仅在 Render 完成后执行,这样您就不会在使用 ember 对象时弄乱它们。

  Ember.run.scheduleOnce('afterRender', this, function(){
    // call GWT switch tab routine
  });
于 2013-09-09T23:34:15.000 回答
0

谢谢 Daniel 和 Márcio Rodrigues Correa Júnior。最终我所做的是添加一个补丁来检查应用程序的当前上下文(在我的例子中是当前选择的选项卡)。如果在收到 AJAX 响应后,应用程序处于正确的上下文中(意味着用户没有更改选项卡)继续。否则,只需忽略响应,不要尝试渲染它。

现在它似乎正在工作

于 2013-09-10T21:31:16.583 回答