4

私のhtmlテンプレートは次のようになります。

   <script type="text/template" id="players-template">
        <table id="example" class="table table-striped table-bordered table-condensed table-hover">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>group</th>
                    <th></th>
                </tr>
            </thead>
            <tbody id="playersTable"></tbody>
        </table>
    </script>  


    <script type="text/template" id="player-list-item-template">
        <td><@= name @></td>
        <td>
            <@ _.each(hroups, function(group) { @>
            <@= group.role @>
            <@ }); @>
        </td>            
    </script>

私のバックボーン ビューは次のとおりです。

   playerView = Backbone.View.extend({
    template: _.template( $("#player-template").html() ),
    initialize: function () 
        if(this.collection){
            this.collection.fetch();
    },
    render: function () {
        this.$el.html( this.template );
        this.collection.each(function(player) {
            var itemView = new app.PlayerListItemView({ model: player });
            itemView.render();
            this.$el.find('#playersTable').append(itemView.$el);
        },this

 });

 // view to  generate each player for list of players
PlayerListItemView = Backbone.View.extend({
   template: _.template($('#player-list-item-template').html()),
       tagName: "tr",
      render: function (eventName) {
        this.$el.html( this.template(this.model.toJSON()) );
         }
  });

上記のコードは完全に機能します。ここで、ブートストラップをサポートする jquery データテーブル プラグインを適用したいと考えています。ここで詳細を確認できます: http://www.datatables.net/blog/Twitter_Bootstrap_2 したがって、render 内に次の行を追加しました。

        render: function () {
        this.$el.html( this.template );
        this.collection.each(function(player) {
                var itemView = new app.PlayerListItemView({ model: player });
               itemView.render();
              this.$el.find('#playersTable').append(itemView.$el);
              $('#example').dataTable( {
                console.log('datatable');
                "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i>   <'span6'p>>",
                "sPaginationType": "bootstrap",
                "oLanguage": {
                    "sLengthMenu": "_MENU_ records per page"
                },
                "aoColumnDefs": [
                  { 'bSortable': false, 'aTargets': [ 2 ] }
               ]
            } );
        },this);

    },

現在、jquery データブルは初期化されていません。通常のテーブルを表示するだけです。

  • jqueryデータテーブルを適用するには、テーブルをどこで初期化する必要がありますか?
  • 彼らはバックボーンなしで完璧に機能しました。
4

1 に答える 1

5

ほとんどの場合、jQueryプラグインが機能するには、要素がページ上にある必要があります。あなたはその見解であなたがどこを呼んでいるのかを示していませんがrender、私はあなたがこのようなことをしていると仮定します:

var view = new PlayerView();
$('#foo').html(view.render().el);  // this renders, then adds to page

これが当てはまる場合、ビューのhtmlがまだページに追加されていないため、レンダリング内でプラグインを使用するのは時期尚早です。

あなたはこれを試すことができます:

var view = new PlayerView();
$('#foo').html(view.el);   // add the view to page before rendering
view.render();

または、これを試すことができます:

var view = new PlayerView();
$('#foo').html(view.render().el);
view.setupDataTable();    // setup the jQuery plugin after rendering and adding to page
于 2013-03-20T13:11:58.810 に答える