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に従って、と のfilterAbilities両方のアクション ハッシュに を追加しようとしました。thisによると、ビューは親のコンテキストであるため、ビューはアビリティコントローラーの一部である必要がありますが、機能していません。App.AbilitiesControllerApp.IndexRoute

私はいくつかのテストを行いthis.get('controller')ましたが、コントローラーをまったくフェッチしていないようです。何が問題を引き起こしているのか、私は少し迷っています。このコードは数回前の RC では機能していましたが、1.0 にアップグレードするとすぐに機能しなくなりました。

ここでやろうとしているのは、能力のリストをフィルタリングすることです。これがこれ以上の方法ではない場合は、お知らせください。どんな助けでも大歓迎です。ありがとう!!

4

1 に答える 1

2

Ember.TextField and Ember.TextArea are no longer simple views but rather subclasses of Ember.Component which means that this.get('controller') does not refer anymore to the views controller.

But there is a different variable which indeed holds a reference to the surrounding controller and this is this.get('targetObject'). Therefore you should send your action to the targetObject:

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

Hope it helps.

于 2013-10-13T06:33:25.497 に答える