我正在尝试使用本Ember指南中描述的'需要'语法在父ArrayController和子ObjectController之间建立关系-http://emberjs.com/guides/controllers/dependencies-between-controllers/
当我尝试访问controllers对象以从子对象获取对父对象的引用时,出现“controllers object undefined”错误。任何帮助表示赞赏!
Ember 版本RC4
模板:
<script type="text/x-handlebars" data-template-name="gigs">
<div> // code simplified
{{#each controller itemController="gig"}}
{{#view App.GigView contentBinding="this"}}
<div class="tile">
<img {{bindAttr src="photo_url"}} />
{{#if widgetDisplayed}}
// widget view
{{/if}}
</div>
{{/view}}
{{/each}}
</div>
</script>
Javascript:
App.GigsController = Ember.ArrayController.extend({
anyWidgetDisplayed: false,
isAnyWidgetDisplayed: function() {
return anyWidgetDisplayed;
}
});
App.GigController = Ember.ObjectController.extend({
needs: ["gigs"],
widgetDisplayed: false,
displayWidget: function() {
console.log(controllers.gigs);
if (!controllers.gigs.isAnyWidgetDisplayed) {
this.set("widgetDisplayed", true);
}
}
});
最佳答案
根据需要使用 Controller 时,应使用get函数获取 Controller ,
displayWidget: function() {
var gigsController = this.get('controllers.gigs')
console.log(gigsController);
if (!gigsController.get('isAnyWidgetDisplayed')) {
this.set("widgetDisplayed", true);
}
}
另外,当您使用itemController时,无需使用需要获取parentController的方法,则可以使用parentController属性
App.GigController = Ember.ObjectController.extend({
widgetDisplayed: false,
displayWidget: function() {
var gigsController = this.get('parentController');
console.log(gigsController);
if (!gigsController.get('isAnyWidgetDisplayed')) {
this.set("widgetDisplayed", true);
}
}
});
参考:this pull request
关于ember.js - Ember 的父子 Controller 关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16967640/