在我的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."
}
}
});
...并访问IndexRoute
,我希望将TestRoute
的模型呈现到TestRoute
的模板中,但只能呈现IndexRoute
' s模型被转发到两个模板。
小提琴: http://jsfiddle.net/3TtGD/1/
如何让Ember使用路由的默认模型而不必明确地合并它们?这看起来很乏味。
此外,具有相同名称的某些模型属性,例如{{heading}}
是可取的,但不是必需的。
解决此问题的最佳方法是什么?
感谢您的时间。
祝你好运, dimhoLt
答案 0 :(得分:4)
在renderTemplate
方法中,您告诉Ember在插座内渲染模板,但它只是将控制器默认为管理路径的控制器。鉴于它是控制器处理路线,因此它管理该路线中的所有模板是有意义的。
当然,您可以使用以下方式指定其他控制器:
this.render("test", {
outlet: "left",
controller: 'test'
});
它又可以是你已经实例化的控制器(并且可能设置为content
):
var testController = this.controllerFor('test');
testController.set(....)
this.render("test", {
outlet: "left",
controller: testController
});
关于使用模型:您可以在路径中调用this.modelFor('test')
,它将返回test
路径的模型(它甚至知道它是否已经被解析)。当我需要访问其中一条父路线的模型时,我通常会这样做。
我认为访问父路线的模型是有意义的,但如果您正在访问不相关路线的模型,则不是这样。你为什么不想merge
两个模型?