我有一个观点,我将控制器连接到通过控制器:在创建时我想要另一个我通常使用需要的控制器:当我添加我收到错误“Uncaught TypeError:无法调用方法'有'null'时
模板:
<script type="text/x-handlebars" charset="utf-8">
<div id="viewport">
{{view App.playerView}}
{{controllers.currentUser.content.name}}
</div>
</script>
<script type="text/x-handlebars" data-template-name="player" charset="utf-8">
<button {{action play on="click"}}>Play</button>
</script>
JS:
App = Ember.Application.create();
App.User = Ember.Object.extend({
name:'John'
});
App.ApplicationRoute = Ember.Route.extend({
setupController: function() {
this.controllerFor('currentUser').set('content', App.User.create({ name:'Jose' }));
}
});
//Controllers
App.ApplicationController = Ember.Controller.extend({
needs:['currentUser']
});
App.CurrentUserController = Ember.Controller.extend();
App.PlayerController = Ember.Controller.extend({
isPlaying: false,
//needs:['currentUser'], //UNCOMMENT TO BREAK!!
play: function() {
this.toggleProperty('isPlaying');
alert(this.get('isPlaying'));
}
});
//Views
App.PlayerView = Ember.View.extend({
templateName:'player',
tagName: 'footer'
});
App.playerView = App.PlayerView.create({
classNameBindings: ['controller.isPlaying:playing'],
controller: App.PlayerController.create()
})
我在这里设置了一个小提琴:http://jsfiddle.net/84F9n/(只需取消注释PlayerController中的行)
答案 0 :(得分:0)
您可以使用{{render}}
helper呈现视图/控制器。
来自文档:
{{render}}
做了几件事:
- 获取相应控制器Renders的单例实例
- 使用此控制器的命名模板设置
的模型- 相应的控制器
对于您的示例,请更改{{view ... }}
帮助程序以改为使用{{render}}
:
{{render "player"}}
这将找到PlayerView
和PlayerController
并使用它们,类似于路线,没有实际的路由部分。