【问题标题】:Ember nested viewsEmber 嵌套视图
【发布时间】:2015-03-23 16:59:44
【问题描述】:

关于在这种情况下处理嵌套视图的“余烬方式”的问题。使用 ember-cli - 我有一个名为“客户”的资源。视图层次结构是:

customers
+- customers.index
+- customers.show

我想在客户级别放置横幅,但在 .index 或 .show 级别指定了部分内容。

所以我向客户控制器添加一个属性并在客户模板中显示它。

import Ember from 'ember';

export default Ember.Controller.extend({
  headingText: 'initial'
}

模板

<h3>{{ headingText }}</h3>
{{ outlet }}

子控制器可以看到该值,但是在更改它时——视图不会改变(原型-vs-继承?)

为了从子控制器更改标题文本,我需要在每个子控制器中执行此操作:

needs: "customers",
headingText: Ember.computed.alias("controllers.customers.headingText")

这是“余烬之路”吗?似乎应该有一种更简单的方法可以在没有样板的情况下冒泡信息(客户控制器上的方法或其他东西)。

假设标题文本将包含来自已解析模型的信息,那么在哪里设置它的最佳位置?在路线?后模?

谢谢

【问题讨论】:

  • 您可以考虑将headingText 设为命名插座。然后,在子路由的renderTemplate 方法中,添加对this.render 的调用,以将相关标头呈现到指定的出口中。当然,另一种方法是在每个子路由模板中复制h3
  • 命名网点是一种选择,但在这里感觉就像是用锤子敲钉子。这本来应该是一个快速的问题,我继续打字。有没有一种快速的方法来单个文件化一个 ember-cli podified 迷你应用程序?

标签: ember.js


【解决方案1】:

在子路由中,你可以考虑使用setupController钩子来修改父路由的属性。

Ember API docs for setupController

setupController 中,您可以使用以下语法获取和设置与当前路由直接关联的路由以外的路由的属性:

在子路由中:

setupController(controller, model) {
    this.controllerFor('customers').set('headingText', 'My awesome new header for the child route.');
}

控制器是单例的,并且会保持其状态,因此您可能需要在每个相关的路由文件中将headingText 属性显式设置为正确的值。

Here's more info on the controllerFor route property.

【讨论】:

    猜你喜欢
    • 2012-09-14
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2013-05-12
    • 2013-01-09
    • 2023-03-31
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多