查看控制器需求:属性不起作用

时间:2013-05-10 00:50:57

标签: javascript ember.js

我有一个观点,我将控制器连接到通过控制器:在创建时我想要另一个我通常使用需要的控制器:当我添加我收到错误“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中的行)

1 个答案:

答案 0 :(得分:0)

Updated JSFiddle

您可以使用{{render}} helper呈现视图/控制器。

来自文档:

  

{{render}}做了几件事:

     
      
  • 获取相应控制器Renders的单例实例
  •   
  • 使用此控制器的命名模板设置
  • 的模型   
  • 相应的控制器
  •   

对于您的示例,请更改{{view ... }}帮助程序以改为使用{{render}}

{{render "player"}}

这将找到PlayerViewPlayerController并使用它们,类似于路线,没有实际的路由部分。