0

最近、Emberjsとtwitterブートストラップに基づいてページを作成しました。このページは、すばらしいemberjsバインディングエンジンを使用して動的に構築されます。私は現在、境界ビューがhtmlでリストをレンダリングしているコントローラーを持っています。

{{#each App.myArrayController}}
       {{#view App.MyItemListView contentBinding="this"}}
           <span>{{view.somethingToPrint}}</span>
       {{/view}}
{{/each}}

{{view.somethingToPrint}}このようにして、ご想像のとおり、スパンタグ内の配列コンテンツのN倍を印刷しています。

今、私はjQueryUIスライダーのリストをレンダリングすることを検討しています。私の質問は、それらが動的に生成されることを$(".slider").slider();考えると、それを「ライブ」にするためにinitメソッドをいつ呼び出す必要があるかということです。実際、これを達成するための通常の方法は何ですか?

私は次のいずれかを使用することを考えました:

  • jQueryの「livequery」プラグインを使用して、追加されたアイテムを透過的に初期化します。欠点は、速度が遅く、すべてのブラウザで機能するとは限らないことです。
  • スライダーを作成している各行にスクリプトタグ全体を埋め込み、スクリプトも追加されてコンテンツが初期化されるようにします。
  • App.myArrayControllerにオブザーバーを追加し$(".slider").slider();ます。これにより、変更が発生した場合にが起動します。

しかし、それでも私はそれらを確信していません。私はTwitterのBootstrapを使用することに慣れており、ほとんどの場合、レンダリング後のスクリプト呼び出しをいじる必要はありません(これが「ブートストラップ」の目的です)。

4

1 に答える 1

2

未回答の質問を残さないための例を次に示します;)

jsfiddle: http: //jsfiddle.net/Sly7/bHL66/

javascript

App = Ember.Application.create();

App.myArrayController = Ember.ArrayController.create({
  content: [
    Ember.Object.create({firstName: "Gart", lastName: "Algar"}),
    Ember.Object.create({firstName: "Wayne", lastName: "Campbell"})
  ]
});

App.MyItemListView = Ember.View.extend({

  didInsertElement: function(){
    this.$().hide(); 
    this.$().fadeIn(1000);        
  },

  somethingToPrint: function(){
    return this.get('content.firstName') + ' ' + this.get('content.lastName');        
  }.property()
});
于 2012-08-15T10:46:41.253 に答える