EmberJS直接段塞URL访问不工作

EmberJS直接段塞URL访问不工作,url,ember.js,Url,Ember.js,我正在使用段塞URL进行更干净的URL转换: 为此: 问题是,如果我通过直接插入url()直接访问该页面,我会得到一个空白页面 以下是我所拥有的: App.Router.map(function() { this.resource('posts', function() { this.resource('post', { path: ':post_id' }); }); }); App.Post.FIXTURES = [{ id: 1, name:

我正在使用段塞URL进行更干净的URL转换:

为此:

问题是,如果我通过直接插入url()直接访问该页面,我会得到一个空白页面

以下是我所拥有的:

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

App.Post.FIXTURES = [{
  id: 1,
  name: 'First Awesome Post',
  slug: 'first-awesome-post'
}];

App.PostRoute = Em.Route.extend({
    model: function(params) {
        return App.Post.find(params.post_id);
    },

    setupController: function(controller, model) {
        this._super.apply(this, arguments);
    },

    serialize: function(model, params) {
        return { post_id: model.get('slug')};
    },
});
我尝试了以下方法:

  • App.postwrouter
    中的
    params.post_id
    替换为
    params.post_slug
    ,并在我的浏览器中输入以下URL;结果:页面CSS和HTML加载,但id#1的数据未加载(即未调用模型挂钩)
  • 去掉序列化功能,在我的浏览器中输入以下URL;结果:一切正常(CSS、HTML和数据加载完美)
我能知道我在这件事上做错了什么吗


另外,我目前正在使用EmberJS 1.0.0-rc.6版

如果您想使用slug,您应该更改模型函数并使用findQuery,因为您是通过id以外的属性搜索模型的,但此函数返回RecordArray,您可以使用setupController钩子来设置数组的唯一对象

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

App.Post.FIXTURES = [{
  id: 1,
  name: 'First Awesome Post',
  slug: 'first-awesome-post'
}];

App.PostRoute = Em.Route.extend({
    model: function(params) {
        return App.Post.findQuery({slug:params.post_slug});
    },
    setupController: function(controller, model) {
    //If the model comes from a link-to helper it will be an object, if it comes from the route it will be an array of one element
      if(Ember.isArray(model)){
        controller.set('model',model.get('firstObject'));
      }
      else{
        controller.set('model',model);
      }
    },

    serialize: function(model, params) {
        return { post_slug: model.get('slug')};
    },
});

谢谢你的建议!理解并遵循您的建议,如果我通过直接遍历URL,那么,
App.PostRoute
现在只返回第一个对象;因此,如果我通过
{{{linkTo“post”post}}{{post.name}}{{/linkTo}}
遍历到模板上说post#2,我就无法检索第二个对象的内容。你有什么建议来解决这个问题?我制作了JSBin来说明你可以玩“全看”游戏谢谢!基本上,它是利用ember API检查返回的数据;如果请求是针对单个数据,但返回的模型是数组,则只需获取返回的第一个对象;如果请求是针对完整列表,则只需执行普通的请求方法;明亮的非常感谢!