【问题标题】:Ember renderTemplate relay modelEmber renderTemplate 中继模型
【发布时间】:2014-01-08 09:59:40
【问题描述】:

在这里努力开发我的 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 的模型被中继到两个模板。

在这里摆弄: http://jsfiddle.net/3TtGD/1/

我如何允许 Ember 使用默认模型进行路由,而不必表达地合并它们?看起来很乏味。

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

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

感谢您的宝贵时间。

最好的问候, 迪霍特

【问题讨论】:

  • 我刚刚看了这个,Ember 建议您为需要不同模型的模板设置不同的控制器,请参阅:[link]emberjs.com/guides/routing/rendering-a-template 通常我会使用商店,使用setupController,您可以从那里访问记录和控制器
  • 这解决了我的问题。谢谢!

标签: ember.js


【解决方案1】:

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

【讨论】:

  • 感谢您的回复,edpaez。我的网站是非常模块化的,我目前对每个模块都有一个特定的路线,而这些路线又可以(目前)呈现为两个不同的出口之一。这只是不同模块的特定组合。但是,在这里使用路线是否正确,或者路线基本上应该只是路径和模型等应该在那时生成还是什么的,我不知道,最佳实践建议总是赞赏!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
相关资源
最近更新 更多