【问题标题】:Ember.js Router v2 dynamic slugEmber.js 路由器 v2 动态 slug
【发布时间】:2013-01-17 03:26:42
【问题描述】:

在以下示例中,使用新的 Router v2 API,ember 应用程序的行为与预期相同,但有一个异常。当悬停在动态创建的链接上时,使用注册的#linkTo Handlebars url 显示未定义。

如何在 URL 中添加 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 数据

这是一个示例小提琴 http://jsfiddle.net/R2SPs/6/

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    这适用于 ember 路由 v2.1 (01.16.13)

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

       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
    });
    

    【讨论】:

    • 接下来解释如何修复它,很高兴知道为什么会修复它。
    • 很确定这修复了它:model: function(params) { return this.store.find("post", {slug: params.post_slug});},其中post_slug 指的是router.js 中使用的标识符
    【解决方案2】:

    路由的路径是“todo.index”,资源定义:

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

    所以为它创建路由和控制器。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多