视图控制器需要:属性不工作

View controller needs: property not working

本文关键字:属性 工作 控制器 视图      更新时间:2023-09-26

我有一个视图,我通过controller: on创建附加一个控制器,我想需要另一个控制器,我通常会使用需求:。当我补充说,我得到一个错误"未捕获的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行)

已更新的JSFiddle

你可以使用{{render}} helper来渲染视图/控制器。

From the docs:

{{render}}做了几件事:

  • 获取相应控制器的单例实例
  • 设置的模型。相应控制器

对于您的示例,将{{view ... }}帮助器更改为使用{{render}}:

{{render "player"}}

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