1

我正在尝试在我的控制器/模板中重用代码。在我的一个模板中,我有以下内容:

{{#if controllers.nodesIndex.content.isUpdating}}

这工作正常,但使这个模板非常具体。我想概括一下。我想做类似的事情:

{{#if controllers.{{indexController}}.content.isUpdating }}

indexController我的控制器中的实际配置参数在哪里:

indexController : 'nodesIndex',

使用的语法不起作用,我不知道是否有办法做我想做的事情。

我尝试过的另一件事很简单:

{{#if isUpdating}}

我已将其定义为控制器中的计算属性。这是通用设置(“基类”):

getIndexController : function () {
    return this.get('controllers.' + this.indexController);
},
isUpdating      : function () { return this.getIndexController().get('content').isUpdating; }.property(),

但是我无法判断property()这个计算属性依赖于哪些其他属性,因为它们实际上是可配置的,正如getIndexController()函数返回的那样。

关于如何访问“动态”控制器内容的任何想法?

4

3 回答 3

2

我认为你走错路了。Ember 为您在控制器之间共享模板提供了一些选项。

这里我用部分 http://jsfiddle.net/marciojunior/KxM9k/做了一个例子

<script type="text/x-handlebars" data-template-name="application">
    <h1>Partial example</h1>
    {{#linkTo "index"}}Index{{/linkTo}}
    {{#linkTo "other"}}Other{{/linkTo}}
    {{outlet}}
</script>

<script type="text/x-handlebars" data-template-name="index">
  <h2>Index template</h2>
  {{partial "updatingMessage"}}
</script>

<script type="text/x-handlebars" data-template-name="other">
  <h2>Other template</h2>
  {{partial "updatingMessage"}}
</script>

所有可用选项都在该链接中http://emberjs.com/guides/templates/rendering-with-helpers/

于 2013-07-29T22:33:15.613 回答
1

在控制器上拥有一个名为“动态”控制器的属性是一个很好的起点。为什么不让你的财产依赖于此呢?

getIndexController : function () {
    return this.get('controllers.' + this.indexController);
},
isUpdating : function () { 
  return this.getIndexController().get('content').isUpdating; 
}.property('indexController'),

如果您将“getIndexController”视为辅助函数,那么它是有道理的。将这两个函数滚动在一起可以更容易地看到 indexController 属性是唯一需要观察的真实属性:

isUpdating : function () { 
  return this.get('controllers.' + this.indexController).get('content').isUpdating; 
}.property('indexController'),
于 2013-07-29T17:36:28.283 回答
0

我通过观察者以间接方式实现了这一点:

isUpdatingChanged: function () {
    this.getTopController().set('isUpdating', this.get('content').get('isUpdating'));
}.observes('content.isUpdating'),
于 2013-07-30T08:31:19.227 回答