Ember.js 如何构造一个多记录余烬应用程序命名的出路?

Ember.js 如何构造一个多记录余烬应用程序命名的出路?,ember.js,ember-router,Ember.js,Ember Router,我正试图构建一个类似Tweetdeck的UI,将中央图书馆中的项目分类。我真的需要有人帮助我了解使用恩伯路由器的标准方法 本质上,我有一个搜索UI,它允许用户同时打开零个或多个类别。类别显示项目列表,用户可以从右侧的中央库添加到其中。通过完全忽略路由器和URL,我成功地拼凑出了一个半工作的概念证明。现在我想回到过去,试着用余烬的方式去做。下面是我试图实现的目标的概要: 如果我理解正确,所需的URL方案将是当前打开的模型ID的逗号分隔列表。我从另一个问题得到了一个好主意 不幸的是,有几个概念我不

我正试图构建一个类似Tweetdeck的UI,将中央图书馆中的项目分类。我真的需要有人帮助我了解使用恩伯路由器的标准方法

本质上,我有一个搜索UI,它允许用户同时打开零个或多个类别。类别显示项目列表,用户可以从右侧的中央库添加到其中。通过完全忽略路由器和URL,我成功地拼凑出了一个半工作的概念证明。现在我想回到过去,试着用余烬的方式去做。下面是我试图实现的目标的概要:

如果我理解正确,所需的URL方案将是当前打开的模型ID的逗号分隔列表。我从另一个问题得到了一个好主意

不幸的是,有几个概念我不明白:

  • 如何构造模板和路由器,使库以其自己的模型和控制器显示?我假设一个命名的
    {{outlet}
    是可行的方法,但当涉及到
    renderTemplate
    配置时,我完全不知所措。或者我应该用
    {{render}}
    来代替?在这两种情况下,我都不理解路由器在这种情况下的作用
编辑1/28:我添加了一个,其中包括一个独立的
路由/模板,并记录了我将其呈现到
类别
模板中的尝试。当我尝试将库模板嵌入到另一个路由中时,Ember希望我如何为库模板提供其模型?我已经用
renderTemplate
{{render}}
尝试了
{outlet}}
,但是在这两种情况下,我在指定模型时都遇到了困难

使用
renderTemplate

App.CategoriesRoute = Ember.Route.extend({
    renderTemplate: function() {
        this.render('categories');
        this.render("library", {
            into: "categories",
            outlet: "library",
            controller: "library",
        });
    },
});
  • 当我的控制器收到打开类别的请求时,我如何与路由器通信?哈希路径如何更新?谁负责加载适当的模型?我假设我应该从
    transitionTo
    transitionToRoute
    开始,但我也不理解路由器在这里的角色。具体问题:

  • 如何从URL反序列化多个逗号分隔的模型?我是用逗号分开还是有更好的方法

  • 一旦我从URL获得ID,我如何使我的模型钩子返回多个记录?我是不是把它们都塞进了灰烬阵

  • 当控制器获得要打开的新记录的ID时,我如何与路由器通信

我试图自己解决这个问题,并且已经阅读了很多次余烬文档,但我恐怕这完全是我的想法。我整理了一份来概述我的想法,并指出我的困境。我将感谢任何人提供的任何帮助。

在这里,他们使用
Ember.RSVP.hash
将多个模型加载到一个路由中,然后使用
setupController
分别设置每个模型(Rails:instance variable?)


我假设使用此方法可以加载所需的任意多个模型。

this.render不接受模型参数,但可以通过controller属性传递模型,因为无论如何,控制器都是模型的代理,所以这样做是有意义的

App.IndexRoute = Ember.Route.extend({
    var self = this,
        notesController = self.controllerFor('notes').set('content', self.store.find('notes'));

    renderTemplate: function() {
        this.render('notes', {
            controller: notesController,
            into: 'index',
            outlet: 'notes'
        });     
    }
});

这很有趣。我想您可以使用(这仍然是实验性的),尽管我还没有使用这个特性。如果我理解正确,查询参数更适合于控制器。在我的示例中,我们计划添加类似于
?library=visible
的内容来显示和隐藏库,但我没有考虑这个问题。我可以等到它出了测试版。对不起,为什么我被否决了?这段代码工作得很好,并且是从一个有信誉的来源获得的。
App.IndexRoute = Ember.Route.extend({
    var self = this,
        notesController = self.controllerFor('notes').set('content', self.store.find('notes'));

    renderTemplate: function() {
        this.render('notes', {
            controller: notesController,
            into: 'index',
            outlet: 'notes'
        });     
    }
});