3

我的模板中有类似的代码:

{{#each items itemController="item"}}

有没有办法在itemController其中一个 s 的实例中获取对兄弟 s 的引用itemController

4

3 回答 3

0

项目控制器很快就会消失(请参阅此处并搜索itemController)。我建议您为您的用例做的是创建一个组件,如下所示:

App.XItemComponent = Ember.Component.extend({
  classNames: ['item'],

  actions: {
    startEdit: function(){
      this.set('beingEdited', true);
      this.set('disallowEdits', true);
    },
    finishEdit: function(){
      this.set('beingEdited', false);
      this.set('disallowEdits', false);
    }
  }
});

<script type="text/x-handlebars" data-template-name="components/x-item">
  {{ item }} 
  <button {{ action "startEdit" }} {{ bind-attr   
    disabled=disallowEdits}}>Edit</button>
  {{#if beingEdited}}
    <button {{ action "finishEdit" }}>Save</button>
  {{/if}}
</script>

disallowEdits是组件将与所有其他组件共享的属性(通过创建组件的模板的控制器),并且beingEdited是不与任何人共享的本地组件属性。

然后,您可以在模板中使用该组件,如下所示:

<script type="text/x-handlebars" data-template-name="index">
  <ul>
    {{#each item in model}}
      <li>{{x-item item=item disallowEdits=disallowEdits }}</li>
    {{/each}}
  </ul>
</script>

完整的工作示例在这里

于 2015-02-26T14:52:20.617 回答
0

您需要将有关具有特定状态的孩子的信息存储在父控制器中。看一个例子

App.Child = Ember.ObjectController.extend({
    isEdited: false,

    actions: {
        toggleEditingMode: function() {
            old = this.get('parentController.currentlyEditing');

            if(typeof old !== "undefined" && old != this) {
                old.set('isEdited', false);
            }

            this.set('parentController.currentlyEditing', this);
        }
    }
});
于 2015-02-26T12:52:15.300 回答
0

我删除了这个答案,因为回想起来,虽然它在技术上是正确的,但实际上并不正确。

于 2013-03-12T21:08:09.360 回答