Ember.js 如何构造一个多记录余烬应用程序命名的出路?
我正试图构建一个类似Tweetdeck的UI,将中央图书馆中的项目分类。我真的需要有人帮助我了解使用恩伯路由器的标准方法 本质上,我有一个搜索UI,它允许用户同时打开零个或多个类别。类别显示项目列表,用户可以从右侧的中央库添加到其中。通过完全忽略路由器和URL,我成功地拼凑出了一个半工作的概念证明。现在我想回到过去,试着用余烬的方式去做。下面是我试图实现的目标的概要: 如果我理解正确,所需的URL方案将是当前打开的模型ID的逗号分隔列表。我从另一个问题得到了一个好主意 不幸的是,有几个概念我不明白:Ember.js 如何构造一个多记录余烬应用程序命名的出路?,ember.js,ember-router,Ember.js,Ember Router,我正试图构建一个类似Tweetdeck的UI,将中央图书馆中的项目分类。我真的需要有人帮助我了解使用恩伯路由器的标准方法 本质上,我有一个搜索UI,它允许用户同时打开零个或多个类别。类别显示项目列表,用户可以从右侧的中央库添加到其中。通过完全忽略路由器和URL,我成功地拼凑出了一个半工作的概念证明。现在我想回到过去,试着用余烬的方式去做。下面是我试图实现的目标的概要: 如果我理解正确,所需的URL方案将是当前打开的模型ID的逗号分隔列表。我从另一个问题得到了一个好主意 不幸的是,有几个概念我不
- 如何构造模板和路由器,使库以其自己的模型和控制器显示?我假设一个命名的
是可行的方法,但当涉及到{{outlet}
配置时,我完全不知所措。或者我应该用renderTemplate
来代替?在这两种情况下,我都不理解路由器在这种情况下的作用{{render}}
库
路由/模板,并记录了我将其呈现到类别
模板中的尝试。当我尝试将库模板嵌入到另一个路由中时,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'
});
}
});