Ember renderTemplate继电器模型

时间:2014-01-08 09:59:41

标签: ember.js

在我的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

1 个答案:

答案 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两个模型?