在渲染视图中访问控制器

时间:2013-10-13 05:55:49

标签: ember.js

我有这样的观点:

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事件触发得非常好,但由于某种原因,它不会转到控制器。

我已尝试根据thisfilterAbilities添加到App.AbilitiesControllerApp.IndexRoute上的操作哈希中。根据{{​​3}},视图应该是能力控制器的一部分,因为它是它的父母的上下文,但它不起作用。

我做了一些测试,看起来this.get('controller')似乎根本没有取得控制器。我有点迷失是什么导致了这个问题。这段代码在几个RCs之前运行,但是一旦我升级到1.0就破坏了。

我在这里要做的是过滤能力列表。如果这不再是这种方式了,请告诉我!任何帮助,将不胜感激。谢谢!

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'
});

希望它有所帮助。