我正在尝试构建一个类似Tweetdeck的UI,将中央图书馆的项目分类。我真的需要帮助围绕使用Ember路由器的规范方式。
基本上,我有一个搜索UI,允许用户同时打开零个或多个类别。类别显示项目列表,用户可以从右侧的中央库添加到这些项目。通过完全忽略路由器和URL,我设法破解了一个半工作的概念证明。现在我想回去尝试以Ember的方式去做。下面是我想要完成的高级草图:
如果我理解正确,所需的URL方案将是当前打开的模型ID的逗号分隔列表。我很清楚如何从另一个问题How to design a router so URLs can load multiple models?处理这个问题。
不幸的是,有一些我不理解的概念:
{{outlet}}
的方法,但我是在renderTemplate
配置时完全丢失了。或者我应该使用{{render}}
代替?在任何一种情况下,我都不了解路由器在这种情况下的作用。 编辑1/28 :我添加了 updated fiddle ,其中包含独立 library
路由/模板和文档我尝试将其呈现到categories
模板中。当我试图将它嵌入另一条路线时,Ember如何期望我将库模板作为模型?我已经尝试{{outlet}}
与renderTemplate
和{{render}}
,但在这两种情况下,我都会在指定模型时遇到困难。
使用renderTemplate
:
App.CategoriesRoute = Ember.Route.extend({
renderTemplate: function() {
this.render('categories');
this.render("library", {
into: "categories",
outlet: "library",
controller: "library",
});
},
});
当我的控制器收到打开类别的请求时,如何将其传达给路由器?哈希路径如何更新?谁负责加载适当的模型?我假设我应该从transitionTo
或transitionToRoute
开始,但我也不了解路由器的角色。具体问题:
如何从URL反序列化多个逗号分隔的模型?我只是分开逗号还是有更好的方法?
从网址获取ID后,如何让我的模型钩子返回多条记录?我只是将它们全部推入Ember阵列吗?
当控制器获取要打开的新记录的ID时,如何将其与路由器通信?
我试图自己解决这个问题并多次阅读Ember文档,但我担心它只是在我脑海中。我整理了一个 minimal (currently non-functional) fiddle 来概述我的想法并指出我被困在哪里。我很感激任何人都可以提供帮助。
答案 0 :(得分:0)
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'
});
}
});
答案 1 :(得分:-1)
You could also try something like this from this link.
App.IndexRoute = Ember.Route.extend({
model: function() {
return Ember.RSVP.hash({
books: this.store.findAll('book'),
genres: this.store.findAll('genre')
});
},
setupController: function(controller, model) {
controller.set('books', model.books);
controller.set('genres', model.genres);
}
});
在这里,他们使用Ember.RSVP.hash
将多个模型加载到一个路径中,然后使用setupController
分别设置每个模型(Rails:实例变量?)。
我假设您使用此方法可以根据需要加载任意数量的模型。