2016-03-04 27 views
0

我正面临着与Ember路由相关的严重问题。直接输入网址时不会调用路由钩子

当我尝试通过link-to帮手显示单个项目时,它工作正常,并且note.index正确调用的路由挂钩。但是,当我直接在浏览器中输入URL(localhost:4200/assessment/1/note/1)时,路由挂接不会被调用,或者是“model”挂钩或“setupController”挂钩或任何其他挂钩。 基本上我想通过store.find将一些额外的参数传递给我的rails应用程序。

Router.js

@resource "assessment", path: 'assessments/:assessment_id', -> 
    @route 'edit' 
    @resource "notes", -> 
    @route "new" 
@resource "note", path: "note/:note_id", -> 
    @route 'edit' 

音符/ index.js

`import Ember from 'ember'` 

noteIndexRoute = Ember.Route.extend 
    model: (params)-> 
     console.log('********************Model Hook******************') 
     assessment = @modelFor('assessment') 
     @store.find('note',params.note_id,assessment_id: assessment.get('id')}); 

    setupController: (controller,model)-> 
     @_super controller, model 
     console.log('********************Setup Contr Hook********************') 
     assessment = @modelFor('assessment') 
     controller.set("model",@store.find('note',model.id,assessment_id: assessment.get('id')}); 

`export default noteIndexRoute` 

注:我想一些额外的参数传递给我的轨道API,这就是为什么我要打电话去钩取上项目。

+0

你在哪个版本上?目前不推荐使用'this.resource'。 – locks

+0

我的应用中也没有看到'/ assessment/1/note/1'路由,因为'note'没有嵌套在'assessment'下面。 – locks

+1

也许不是你所遇到的具体问题,但是'controller.set('model','将给'model'属性分配一个承诺,这不是你可能想要的。你需要做set一个'then'子句,或者更可能的是,在一个'beforeModel'或'afterModel'钩子中执行,Ember将负责解决您的承诺。另外,您不需要在'model'中使用'return'钩? – 2016-03-04 13:51:20

回答

0

Ember版本是1.10.0。现在,当我在浏览器中输入网址并且运行良好时,路由钩子正在快速发展。实际上我的路由文件是index.js,它出现在note/index.js路径中。我将index.js路径从note目录移动到"app/routes/"目录,并将index.js文件的名称更改为note.js文件。所以我的路径文件的新路径是app/routes/note.js.它解决了我的问题,现在我的钩子正常工作,并在我将直接url输入到大型浏览器时调用。

同样,我移动并更改控制器文件和模板文件的名称和路径。从note/index.jsnote/index.hbsapp/routes/note.js用于控制器和app/templates/note.hbs用于模板文件。

相关问题