我的模板中有类似的代码:
{{#each items itemController="item"}}
有没有办法在其中一个itemController
s的实例中引用兄弟itemController
?
答案 0 :(得分:0)
我正在删除这个答案,因为回想起来,虽然它在技术上是正确的,但却没有用。
答案 1 :(得分: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);
}
}
});
答案 2 :(得分:0)
项目控制器很快就会消失(请参阅here并搜索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>
完整的工作示例here