Ember.js路由器v2动态slug

时间:2013-01-17 03:26:42

标签: ember.js ember-data

在以下示例中,使用新的Router v2 API,ember应用程序按预期运行,但有一个例外。将鼠标悬停在动态创建的链接上时,使用已注册的#linkTo Handlebars,url显示为undefined。

如何在网址中设置一个slug字段?

这是模型

App.Todo = DS.Model.extend({
  slug: DS.attr('string'),
  date: DS.attr('date'),
  updated: DS.attr('date'),
  task: DS.attr('string'),
  description: DS.attr('string')
});

我的路由器

App.Router.map(function(match){
  this.route('index', {path: '/'});
  this.resource('todos', {path: '/todos'}, function(){
    this.resource('create', {path: '/create'});
    this.resource('todo', {path: '/:slug'}, function(){
      this.resource('edit', {path: 'edit'});
    });
  });
});

我知道这确实显示'未定义',但这将是一个不错的(Handlebars)

{{#each todo in tasks}}
  <div class="user">
    {{#linkTo todo todo.slug}}<h4><i class="icon-list"></i>{{todo.task}}</h4>{{/linkTo}}
     <p>{{todo.description}}</p>
  </div>
{{/each}}

感谢您的任何指示!我也在使用Ember-data

这是一个小例子 http://jsfiddle.net/R2SPs/6/

2 个答案:

答案 0 :(得分:4)

这适用于ember routing v2.1(01.16.13)

感谢IRC上#emberjs上的rakl,这是一个解决问题的混合

   App.SlugRouter = Ember.Mixin.create({
        serialize: function(model, params) {
            var name, object;
            object = {};
            name = params[0];
            object[name] = model.get('slug');
            return object;
        }
    });

现在把它放在你的路由器和你的黄金

App.TodoRoute = Ember.Route.extend(App.SlugRouter,{
    //insert your code
});

答案 1 :(得分:0)

路径的路径是“todo.index”,其中包含资源定义:

this.resource('todo', {path: '/:slug'}, ...

为此创建路由和控制器。

相关问题