2

CollectionViewを含むContainerViewがあります。このCollectionViewが画面にレンダリングされた後、jquery 関数を実行する必要があります。この関数は、基本的にレンダリングされたテンプレートのコンテンツを調べて、いくつかの表示変更を実行します。

CollectionViewのdidInsertElement内でその jquery を実行すると動作しますが、CollectionView内のすべての要素に対して実行されますが、最後に 1 回実行するだけで十分です。それを指定するにはどうすればよいですか?

http://jsfiddle.net/JFqNr/ (メモは jsfiddle または何らかの理由でレンダリングされませんが、構造を示すためだけに表示されます)

App = Ember.Application.create();

App.FooContainerView = Ember.ContainerView.extend({
    childViews: ['elementList'],    

    elementList: Ember.CollectionView.extend({
        content: function() {
            return [
                { Title: "Dashboard", ID: "dashboard" },
                { Title: "Invoices", ID: "invoices" },
                { Title: "Expenses", ID: "expenses" },
                { Title: "People", ID: "people" },
                { Title: "Reports", ID: "reports" },
                { Title: "Settings", ID: "settings" }
            ];
        }.property(),        
       template: Ember.Handlebars.compile( '{{view.content.title}}' ),

       didInsertElement: function() {
             // perform jquery function            
       }
    }),

   didInsertElement: function() {
         // does not work if perforemed here
   }    
});

App.initialize();
​
4

1 に答える 1

4

これを行う機能はごく最近マスターブランチに追加されたばかりなので、独自のバージョンのEmberをコンパイルする必要があります。これで、すべての個別のビューがレンダリングされた後に実行するようにキューに
スケジュールできます。afterRender

App.FooContainerView = Ember.ContainerView.extend({
  // Existing code
  didInsertElement: function() {
    Ember.run.scheduleOnce('afterRender', this, function(){
      // perform jQuery function here;
    });
 }

コードの詳細については、https://github.com/emberjs/ember.js/pull/1528を参照してください。

于 2012-11-24T07:50:07.567 に答える