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

我已经尝试根据this将 the 添加到 the和 thefilterAbilities的操作哈希中。据此,视图应该是能力控制器的一部分,因为是它的父级的上下文,但它不起作用。App.AbilitiesControllerApp.IndexRoute

我已经进行了一些测试,似乎this.get('controller')根本没有获取控制器。我对导致问题的原因有点迷茫。这段代码在几个 RC 之前就可以工作,但是当我升级到 1.0 时它就坏了。

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

4

1 回答 1

2

Ember.TextField并且Ember.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'
});

希望能帮助到你。

于 2013-10-13T06:33:25.497 回答