1

库版本:
jQuery:2.1.1
DataTables:1.10.1-dev
dataTablesTableTools:2.2.1
dataTables.dataTables.editor.min.js:1.2.3

我正在尝试使用 Datatableseditor 使用 Backbone、RequireJS 和 Datatables 来实现 CRUD 操作。但是我收到了错误消息:

$.fn.dataTable.Editor is not a constructor"   

可能是什么原因?

这是我的配置:

require.config({
baseUrl: 'js',
paths: {
    jquery: 'vendor/jquery.min',
    datatables: 'vendor/jquery.dataTables.min',
    datatablesTableTools: 'vendor/dataTables.tableTools.min',
    datatablesEditor: 'vendor/dataTables.editor.min'
},
shim: {
    jquery : {
        exports : '$'
    },
    datatables: { 
        deps: [
            'jquery',                
        ] 
    },
    datatablesTableTools:   { deps: ['datatables'] },
    datatablesEditor:       { deps: ['datatables'] }        
}
});

使用它如下:

require(["jquery", "datatables"], function () {

var editor = new $.fn.dataTable.Editor( {
    "ajax": "table.line.php"
} );

$('#myGrid').dataTable( {
    "aaData": [
        ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],
        ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C']
    ],
    "aoColumns": [
        { "sTitle": "Engine" },
        { "sTitle": "Browser" },
        { "sTitle": "Platform" },
        { "sTitle": "Version" },
        { "sTitle": "Grade" }
    ],
    "tableTools": {
        "sRowSelect": "os",
        "aButtons": [
            { "sExtends": "editor_create", "editor": editor },
            { "sExtends": "editor_edit",   "editor": editor },
            { "sExtends": "editor_remove", "editor": editor }
        ]
    }
});
});
4

2 回答 2

1

我认为您在依赖关系表中犯了一个错误。在您的第二个代码中,它应该是这样的:

require(["jquery", "datatablesEditor"], function () {
[...]

代替

require(["jquery", "datatables"], function () {
[...]
于 2014-07-02T13:26:08.577 回答
0

我查过了,更恶毒。例如,当您查看插件 datatables-fixedcolumns 的源代码时,它的名称已指定,因此您需要使用它而不是您自己的别名/名称。

源代码 dataTables.fixedColumns.js :

[...]
// Define as an AMD module if possible
if ( typeof define === 'function' && define.amd ) {
    define( 'datatables-fixedcolumns', ['jquery', 'datatables'], factory );
}
else if ( jQuery && !jQuery.fn.dataTable.FixedColumns ) {
    // Otherwise simply initialise as normal, stopping multiple evaluation
    factory( jQuery, jQuery.fn.dataTable );
}
[...]

所以在你的 requirejs.config 中,你需要这样写:

[...]
paths: {
    jquery: 'vendor/jquery.min',
    datatables: 'vendor/jquery.dataTables.min',
    datatables-fixedcolumns: 'vendor/dataTables.fixedColumns'
[...]

代替

[...]
paths: {
    jquery: 'vendor/jquery.min',
    datatables: 'vendor/jquery.dataTables.min',
    datatablesFixedColumns: 'vendor/dataTables.fixedColumns'
[...]
于 2014-07-02T14:25:45.557 回答