我的模板中有类似的代码:
{{#each items itemController="item"}}
有没有办法在itemController
其中一个 s 的实例中获取对兄弟 s 的引用itemController
?
我的模板中有类似的代码:
{{#each items itemController="item"}}
有没有办法在itemController
其中一个 s 的实例中获取对兄弟 s 的引用itemController
?
项目控制器很快就会消失(请参阅此处并搜索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>
完整的工作示例在这里
您需要将有关具有特定状态的孩子的信息存储在父控制器中。看一个例子
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);
}
}
});
我删除了这个答案,因为回想起来,虽然它在技术上是正确的,但实际上并不正确。