【问题标题】:"New" route being ignored in ember-app-kit“新”路由在 ember-app-kit 中被忽略
【发布时间】:2013-10-13 01:24:03
【问题描述】:

即使我明确定义了路由,我的应用程序也会继续生成默认路由。我认为我忽略了一个命名约定,但谷歌搜索、stackoverflowing、discuss.emberjs.com'ing 和对计算机的普通旧诅咒并没有让我有任何收获。

app/router.js

var Router = Ember.Router.extend();    

Router.map(function(){                 
  this.resource('things', function() {
    this.route('new');                 
  });                                  
});                                    

export default Router;

app/routes/things_new.js

var ThingsNewRoute = Em.Route.extend({     
  model: function() {                       
    window.console.log('hello hello');      
    return this.store.createRecord('thing');
  }                                         
});                                         

export default ThingsNewRoute;             

访问http://localhost:8000/#/things/new,模板渲染良好,没有错误。 ember 日志的输出:

generated -> route:application Object {fullName: "route:application"} ember.js:415
generated -> route:things Object {fullName: "route:things"} ember.js:415
generated -> route:things.new Object {fullName: "route:things.new"} ember.js:415
generated -> controller:application Object {fullName: "controller:application"} ember.js:415
Rendering application with default view <(subclass of Ember.View):ember267> Object {fullName: "view:application"} ember.js:415
generated -> controller:things Object {fullName: "controller:things"} ember.js:415
Rendering things with default view <Ember._MetamorphView:ember283> Object {fullName: "view:things"} ember.js:415
generated -> controller:things.new Object {fullName: "controller:things.new"} ember.js:415
Rendering things.new with default view <Ember._MetamorphView:ember293> Object {fullName: "view:things.new"} ember.js:415
Transitioned into 'things.new' ember.js:415
Ember Debugger Active

问题是这样的:

generated -> route:things.new Object {fullName: "route:things.new"} ember.js:415

它不应该生成这个,因为我正在定义它。是否有一些我没有遵循的文件命名约定?

还在 Chrome 中查看 Ember Inspector。在 ThingsNewRoute 下的“自己的属性”下:

routeName: things.newSend
controller: (generated things.new controller)
lastRenderedTemplate: things.new
teardownOutletViews: [ function() { ... } ]

【问题讨论】:

  • 您的项目使用哪种构建工具?
  • @chrmod,他正在使用 ember-app-kit

标签: ember.js routes ember-app-kit


【解决方案1】:

在 ember-app-kit 中,要让解析器正确拾取您的路线,您必须将它们放在子目录中。

例如,对于您的用例,使用如下路由器映射:

Router.map(function(){                 
  this.resource('things', function() {
    this.route('new');                 
  });                                  
}); 

目录结构应该是:

app/
   ...
   routes/
      things/
        new.js
        ...

因为解析器期望路由 ThingsNewRoute 可以在 app/routes/things/new.js 中找到

希望对你有帮助。

【讨论】:

  • 早些时候尝试过,但(认为)它不起作用。看到你的答案后又试了一次,当然,现在一切都很好了,哈哈。谢谢!
【解决方案2】:

ThingsNewRoute 应该是您的应用程序对象的属性。所以声明看起来像:

App.ThingsNewRoute = Em.Route.extend({
    ....
})

将名称 App 替换为您分配给 Ember.Application.create(); 的变量

【讨论】:

  • 根据问题下的 cmets,我使用的是 ember-app-kit。
猜你喜欢
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多