使用datatables插件的ember js

时间:2012-06-27 01:13:41

标签: jquery-plugins datatables ember.js

我正在尝试使用EMber JS的datatable jquery插件。看起来像Ember试图用一些新数据更新DOM的那一刻,它在数据表设置样式并插入一些元素如搜索栏,twitter引导分页页脚等后出现问题。代码如下

App.TableView = Em.View.extend({
    classNames:['table','table-striped','table-bordered','dataTable'],
    tagName:'table',
    didInsertElement:function (){
       this.$().dataTable({

           "sPaginationType": "bootstrap",
           "oLanguage": {
               "sLengthMenu": "_MENU_ records per page"
           }
       });
    }
});

把手的用法如下:

{{#view App.TableView }}
        {{view App.ListStaffView}}
 {{/view}}

App.ListStaffView中包含以下内容

App.ListStaffView = Ember.View.extend({
  templateName:    'list',
  staffBinding: 'App.staffController',

  showNew: function() {
    this.set('isNewVisible', true);
  },

  hideNew: function() {
    this.set('isNewVisible', false);
  },

  refreshListing: function() {
    App.staffController.findAll();
  }
});

,列表模板如下

<thead>
                        <tr>
                        <th>Name</th>
                        <th>Email</th>
                        </tr>
                        </thead>
                        <tbody>
                        {{#each staff}}
                        {{view App.ShowStaffView staffBinding="this"}}
                        {{/each}}
                        </tbody>

                        <tfoot>
                        <div class="commands">

                        <a class="btn btn-inverse" href="#"{{action "showNew"}}>
                            <i class="icon-plus"></i>
                        </a>
                        <a class="btn btn-inverse" href="#"{{action "refreshListing"}}>
                            <i class="icon-refresh"></i>
                        </a>

                        </div>
                        </tfoot>

加载后的错误就像这样

错误:无法对Metamorph执行操作

我使用零配置进行了数据表集成,但失败了。由于Ember无法将数据插入DOM,因此JQuery数据表不断说“无数据”

3 个答案:

答案 0 :(得分:1)

数据表可以在某些预期的DOM结构上正常工作,同样适用于Ember。如果您同时使用两者,则会修改其他预期的DOM结构。这就是问题的原因。

如果您决定使用Ember,则使用Ember小部件库,例如用于TableView的flame.js。

答案 1 :(得分:1)

我遇到了同样的问题,并且能够通过在保存表格的视图上调用rerender()来解决问题。

例如,在我看来,我有一个名为editRow()的方法,它将表格文本更改为输入框。我是这样做的:


    editRow: function(event)
    {
        var obj = event.context;
        obj.setIsEditing(true);
        this.rerender();
    }

答案 2 :(得分:0)

您不能在表格中使用#each帮助程序,该表格将被DataTables表“覆盖”。