2013-10-13 172 views
2

我有这样一个观点:访问控制器渲染

App.AbilityFilter = Ember.TextField.extend({ 
    classNames: ['span3'], 
    keyUp: function(evt) { 
     this.get('controller').send('filterAbilities','text'); 
    }, 
    placeholder:'Search abilities' 
}); 

它的渲染这样的部分:

<script type="text/x-handlebars" data-template-name="abilities"> 
    {{view App.AbilityFilter}} 
    <div class="accordion" id="abilities"> 
      {{#each ability in model}} 
       <div class="accordion-group">  
        {{ability.name}} 
       </div> 
      {{/each}} 
     </div> 
</script> 

正在被渲染在我的应用程序是这样的:

{{render 'abilities'}} 

我遇到的问题是与事件或相反,行动。 keyUp事件触发得很好,但由于某种原因,它不会去控制器。

我试着在App.AbilitiesControllerApp.IndexRoute根据this加入filterAbilities的动作散列。根据this,该视图应该是能力控制器的一部分,因为这是它的父项的上下文,但它不起作用。

我已经做了一些测试,看起来好像this.get('controller')根本没有取得控制器。我对有什么导致问题感到有点失落。此代码在以前的几个RC上工作过,但是一旦我升级到1.0,它就打破了。

我想在这里做的是筛选能力列表。如果这不是这种方式,请让我知道!任何帮助,将不胜感激。谢谢!!

回答

2

Ember.TextFieldEmber.TextArea不再是简单的意见,但中Ember.Component这意味着this.get('controller')不会再参考意见控制器,而子类。

但是有一个不同的变量,它确实对周围的控制器有参考,这是this.get('targetObject')。因此,你应该把你的动作到targetObject

App.AbilityFilter = Ember.TextField.extend({ 
    classNames: ['span3'], 
    keyUp: function(evt) { 
    this.get('targetObject').send('filterAbilities','text'); 
    }, 
    placeholder:'Search abilities' 
}); 

希望它能帮助。

+0

谢谢哟!我只是扩展了Embers.View的视图! – NicholasJohn16