Ember renderTemplate 中继模型

Hel*_*röm 3 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."
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

...并访问IndexRoute,我希望TestRoute的模型能够渲染到TestRoute的模板中,但只有 的IndexRoute模型会中继到两个模板。

在这里小提琴http://jsfiddle.net/3TtGD/1/

如何允许 Ember 使用路线的默认模型,而不必明确地合并它们?看起来很乏味。

此外,一些模型属性具有相同的名称,例如{{heading}}是可取的,但不是必需的。

解决这个问题的最佳方法是什么?

感谢您的时间。

最好的问候,迪霍特

edp*_*aez 5

在该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这两个模型?