1

我有一个用户列表和两个视图:一个表视图列出所有可用用户,一个详细视图查看特定用户的详细信息。现在我想在我的导航菜单中为一个特殊用户(“我”用户)提供一个链接。我努力了:

{{#linkTo "user/me"}}Me{{/linkTo}}

灰烬 说:

Assertion failed: The attempt to linkTo route 'user/me' failed. The router did not find 'user/me' in its possible routes: 'users', 'user', 'index'

我也尝试过:

{{#linkTo "user" "me"}}Me{{/linkTo}}

但是 ember 链接到#/user/undefined,我想要#/user/me

如何链接到特定的用户 ID?

我有这个jsfiddle 来展示我想要做什么。

4

2 回答 2

2

您需要添加一个UserRoute以这种方式对模型进行序列化的方法。

App.UserRoute = Ember.Route.extend({
    serialize: function(model) {
        return {user_id:model};
    }
});

我刚刚model在这里使用,您将使用模型的某些属性,通常是id.

使用方法linkTo是给它命名资源,独立于嵌套,限定动态段。

例如,post/1/comment/1。你linkTo会是,

linkTo 'comment' thePost theComment

其中thePosttheComment是模板可访问的与 Post-1 和 Comment-1 对应的绑定/变量。

这是工作jsfiddle

编辑:您需要加载相应的模型setupController

setupController: function(controller, model) {
    App.User.find(model).then(function(result) {
      controller.set('model', result);  
    });
}

更新了 jsfiddle

更新 2将 setupController 添加到小提琴中。(关于直观像素)

于 2013-07-08T08:26:09.980 回答
0

我创建了一个手动链接,没有使用linkTo,这就是我想要的。这是更新的 jsfiddle。使用这种方法,无需乱用Routes,并且原始链接不会损坏。

我的导航栏中的代码现在是:

<nav>
  {{#linkTo "users"}}Users{{/linkTo}}
  {{#linkTo "user" "me"}}Me (bad!){{/linkTo}}
  <a class="ember-view" href="#/user/me">Me (good!)</a>
</nav>

这是生成的html:

<nav>
  <a id="ember250" class="ember-view" href="#/users">Users</a>
  <a id="ember253" class="ember-view" href="#/user/undefined">Me (bad!)</a>
  <a class="ember-view" href="#/user/me">Me (good!)</a>
</nav>

这种方法的缺点是:

  • 我必须使用 手动定义链接html,这在linkTos 集合中似乎很尴尬。也许我应该为此创建一个linkToId车把助手。
  • 我必须手动跟踪路线:如果我的路线发生变化,我需要手动更新href. 也许这可以linkToId通过访问路由器配置在帮助程序中处理。
  • 生成的链接没有ember-id,我看不到解决方案。不知道这会有什么副作用。
于 2013-07-08T10:03:23.847 回答