Ember.js 如何基于属性名访问控制器的内容

Ember.js 如何基于属性名访问控制器的内容,ember.js,Ember.js,我正在尝试重用控制器/模板中的代码。在我的一个模板中,我有以下内容: {{#if controllers.nodesIndex.content.isUpdating}} 这很好,但使此模板非常具体。我想概括一下。我想做一些事情,比如: {{#if controllers.{{indexController}}.content.isUpdating }} 其中,indexController实际上是我的控制器中的一个配置参数: indexController : 'nodesIndex',

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

{{#if controllers.nodesIndex.content.isUpdating}}
这很好,但使此模板非常具体。我想概括一下。我想做一些事情,比如:

{{#if controllers.{{indexController}}.content.isUpdating }}
其中,
indexController
实际上是我的控制器中的一个配置参数:

indexController : 'nodesIndex',
所使用的语法不起作用,我不知道是否有办法做到我正在尝试的事情

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

{{#if isUpdating}}
我把它定义为控制器中的一个计算属性。这是一般设置(“基类”):

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


关于如何访问“动态”控制器的内容有什么想法吗?

在控制器上有一个属性,即“动态”控制器的名称,这是一个很好的开始。为什么不让你的财产依靠它呢

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'),

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

在这里,我举了一个例子


局部示例
{{{链接到“索引”}索引{{/linkTo}
{{{linkTo“other”}other{{/linkTo}
{{outlet}}
索引模板
{{部分“更新消息”}
其他模板
{{部分“更新消息”}

所有可用的选项都在该链接中

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

isUpdatingChanged: function () {
    this.getTopController().set('isUpdating', this.get('content').get('isUpdating'));
}.observes('content.isUpdating'),

我已经在使用partials/outlet了。不过,我的顶级模板可以统一在一个模板中。这就是为什么我要删除任何特定于控制器的引用,并在控制器中进行配置。想象一下,您希望将“索引”和“其他”模板统一为“通用”模板。由于我的模板使用单独的文件,我希望能够使用符号链接链接到一个公共模板,或者使用其他技巧。不确定这是否可行:
isupdate
不依赖于
this.indexController
的值,但是在
中指定的
控制器
内容
正在更新
属性。也就是说,即使
this.indexController
没有更改(它不会更改:它是给定控制器的固定参数),
isupdate
属性很可能会更改,因为在
this.indexController
中指定的控制器中引用的属性将更改。
<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>
isUpdatingChanged: function () {
    this.getTopController().set('isUpdating', this.get('content').get('isUpdating'));
}.observes('content.isUpdating'),