链接到特定的对象ID

时间:2013-07-08 07:48:50

标签: ember.js

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

{{#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?

我有this jsfiddle来展示我想要做的事情。

2 个答案:

答案 0 :(得分: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添加到fiddle.(关于直观像素)

答案 1 :(得分:0)

我创建了一个手动链接,没有使用linkTo,这就是我想要的。这是updated 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手动定义链接,这在linkTo的集合中看起来很尴尬。也许我应该为此创建一个linkToId把手助手。
  • 我必须手动跟踪路线:如果路线发生变化,我需要手动更新href。也许这可以通过访问路由器配置在linkToId帮助程序中处理。
  • 生成的链接没有ember-id,我看不到解决方法。不知道这有什么副作用。