【问题标题】:Ember.js new router custom slug usageEmber.js 新路由器自定义 slug 使用
【发布时间】:2013-01-17 20:42:53
【问题描述】:

我正在使用这个路由器代码:

Ngin.Router.map(function(match) {
    "use strict";
    this.route('index', {path: '/'});
    this.route('article', {path: '/technical/:url/'});
});

我需要以某种方式在serialize 方法中获取被点击的元素url,这样我才能从模型中获取该文章的数据。在id 的情况下,我看起来很明显应该如何执行此操作,但我不知道如何使用url 执行此操作。

【问题讨论】:

  • 重写路由器的模型方法怎么样?
  • 路由器模型方法理论上替代了序列化方法(虽然我不确定)。但是,是的,你是对的,这可能是应该做的事情。问题是在 url 路由参数而不是默认 id 的情况下应该如何完成?

标签: ember.js ember-router


【解决方案1】:

与 Ember 一样,解决方案很简单。唯一需要习惯的是,Ember 不是 jQuery,而 Ember 中的上下文是(或应该是)数据,也就是模型。

Ngin.ArticleRoute = Ember.Route.extend({
    serialize: function(model) {
        "use strict";
        return {
            url: model.get("url") + "/"
        };
    }
});

在这种情况下必须像这样设置上下文:

{{#linkTo "article" article}}{{article.title}}{{/linkTo}}

就是这样。就这么简单。

【讨论】:

  • 看起来有人对此投了反对票,没有发表任何评论。我想知道发生了什么。答案仍然有效,仍然很好。
【解决方案2】:

你可以这样重新定义路线

Ngin.Router.map(function(match) {
    "use strict";
    this.route('index', {path: '/'});
    this.route('article', {path: '/technical/:url/'});
});

Ngin.ArticleRoute = Ember.Route.extend({
  model: function(params) {
    return Ngin.Article.find({'url': params.url});
  }
});

http://emberjs.com/guides/routing/specifying-a-routes-model/#toc_dynamic-models

【讨论】:

  • 顺便说一句,我正在寻找解决方案如何只提取一个对象,而不是 ModelArray。
  • 这是我在文档中读到的第一件事,但模型函数从未被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 2017-09-09
  • 2018-04-29
相关资源
最近更新 更多