2

我有一个 Ember.js 应用程序有一个相当奇怪的问题。

如果我通过 Ember 的路由器导航到它,我有一个页面会中断,但如果直接加载则不会。在这种情况下,buy/credit_card/index

http://localdev/#/buy/credit_card如果我直接在浏览器中加载,页面可以正常工作。

如果我在浏览器中加载http://localdev/,然后单击几个链接#/buy/credit_card,我会很快转到这些链接,我会收到以下错误消息:

断言失败:无法在路径“App.OrderCalculatorView”处找到视图
断言失败:您必须将视图传递给#view helper,而不是 App.OrderCalculatorView ()
Uncaught TypeError: Cannot read property 'proto' of undefined

(相关部分)相关视图的模板如下所示:

<h3>Pay order with credit card</h3>

<p>Description here</p>

<form>
  {{log App.OrderCalculatorView}}
  {{view App.OrderCalculatorView}}

  <label>

{{log App.OrderCalculatorView}}失败时返回未定义。

的定义App.OrderCalculatorView与应用程序的其余部分在同一个文件中,并放在路由器之前 - 它看起来像这样:

App.OrderCalculatorView = Ember.View.create({
  templateName: 'order/calculator',
});

应用程序的所有 JavaScript 代码都在同一个app.js文件中,所有模板都在index.html文件中,并且它们作为静态文件提供(在本例中由 nginx 提供),因此在某些情况下未定义视图是没有意义的在其他情况下,而不是在其他情况下。有没有Ember.View.create()可能返回的情况undefined?或者还有什么可以解释这种行为?

4

1 回答 1

4

您应该extend而不是create您的视图,ember 将在渲染时创建一个实例,并且当从 DOM 中删除时它也会销毁同一个实例。换句话说,ember 将负责视图的生命周期。

所以试试这个:

App.OrderCalculatorView = Ember.View.extend({
  templateName: 'order/calculator',
});

希望能帮助到你。

于 2013-08-11T10:19:24.110 回答