2

我是我的 app.js,我正在定义:

App.Router.map(function() {
    this.resource('post', {
        path: ':post_filename'
    });
});

我的帖子模板定义为:

<script type="text/x-handlebars" id="post">
  {{model}}
</script>

我正在链接到帖子:

{{#linkTo 'post' filename}}{{filename}}{{/linkTo}}

当我单击链接时,文件名按预期打印出来,我的 url 格式为:http://localhost:8000/#/post-filename. 伟大的。但是,如果我重新加载该 url(或者只是导航到它而不通过链接)[object Object]就会被打印出来。

我想我错过了 EmberJS 如何工作的基本概念。我想这不仅仅是将模型从网址中拉出来?有什么更好的方法来做到这一点?

4

1 回答 1

2

/#/post-filename/直接导航到时会发生什么

因为您在post资源 ( path: 'post_filename') 中指定了动态段,所以路由需要一个模型,您可以使用模型挂钩的返回值指定它。默认情况下,对于名为 PostRoute 的路由,Ember 会自动生成一个模型钩子,如下所示:

model: function(params) {
  return App.Post.find(params.post_id);
}

在这种情况下,我认为这不是您想要的。您是否定义了 Post 模型?model如果没有,您可以将钩子覆盖PostRoute到您需要的任何位置,例如:

model: function(params) {
  //instantiate your model manually (ajax call, load from fixture, whatever)
  return getMyModel(params.post_filename)
}

请注意,params参数是一个对象,其键等于您在路由中指定的动态段。按照惯例,如果是PostRoute,您将使用params.post_idand path: /post/:post_id

看看模型的路由指南

那么,为什么直接单击链接时它会起作用?(通过{{#linkTo 'post' filename}}

您尝试转换到 'post' 路线,并且 linkTo 的参数(在这种情况下,它是filename内部的变量linkTo 'post' filename)作为您要输入的路线的模型传递,并且模型挂钩被一起跳过。Ember 假设由于您正在设置 linkTo,因此您将提供模型。

请参阅链接到帮助文档

于 2013-07-27T19:34:06.347 回答