在这里努力开发我的 Ember 应用程序,一切进展顺利。但是,我遇到了意外行为的问题,并且不确定解决此问题的最佳方法。
问题是在特定路线中,我想将另一条路线渲染到另一个出口。但是,我渲染到另一个出口的另一条路线并不保留它自己的模型。
如果我这样做:
App.TestRoute = Ember.Route.extend({
model: function() {
return {
heading: "Test",
testContent: "This is test."
}
}
});
App.IndexRoute = Ember.Route.extend({
renderTemplate: function() {
this.render("test", {
outlet: "left"
});
this.render({
outlet: "right"
});
},
model: function() {
return {
heading: "Index",
indexContent: "This is index."
}
}
});
Run Code Online (Sandbox Code Playgroud)
...并访问IndexRoute,我希望TestRoute的模型能够渲染到TestRoute的模板中,但只有 的IndexRoute模型会中继到两个模板。
在这里小提琴: http://jsfiddle.net/3TtGD/1/
如何允许 Ember 使用路线的默认模型,而不必明确地合并它们?看起来很乏味。
此外,一些模型属性具有相同的名称,例如{{heading}}是可取的,但不是必需的。
解决这个问题的最佳方法是什么?
感谢您的时间。
最好的问候,迪霍特
在该renderTemplate方法中,您告诉 Ember 在插座内渲染模板,但它只会将控制器默认为管理路线的控制器。鉴于它是处理路由的控制器,因此它管理该路由中的所有模板是有意义的。
当然,您可以使用以下方法指定不同的控制器:
this.render("test", {
outlet: "left",
controller: 'test'
});
Run Code Online (Sandbox Code Playgroud)
它又可以是您已经实例化的控制器(并且可能设置它content):
var testController = this.controllerFor('test');
testController.set(....)
this.render("test", {
outlet: "left",
controller: testController
});
Run Code Online (Sandbox Code Playgroud)
关于使用模型:你可以this.modelFor('test')在路由内部调用,它会返回test路由的模型(它甚至知道它是否已经被解析)。当我需要访问父路由之一的模型时,我通常会这样做。
我认为访问父路线的模型是有意义的,但如果您要访问不相关路线的模型,则意义不大。你为什么不想要merge这两个模型?