我有这样的观点:
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将filterAbilities
添加到App.AbilitiesController
和App.IndexRoute
上的操作哈希中。根据{{3}},视图应该是能力控制器的一部分,因为它是它的父母的上下文,但它不起作用。
我做了一些测试,看起来this.get('controller')
似乎根本没有取得控制器。我有点迷失是什么导致了这个问题。这段代码在几个RCs之前运行,但是一旦我升级到1.0就破坏了。
我在这里要做的是过滤能力列表。如果这不再是这种方式了,请告诉我!任何帮助,将不胜感激。谢谢!
答案 0 :(得分: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'
});
希望它有所帮助。