0

CakePHP 2.6 プロジェクト (および DT 1.10.6) の 1 つでtigrang/cakephp-datatableを使用しています。これまでのところ、プラグインの作成者の助けを借りて、プラグインを正常に実装することができました。プラグインは優れており、維持したい.

現在、公式の DT の例が非常に乱雑で制限されているため、(特に) 列フィルタリング機能を実現するために、既存のデータ テーブルと共にvedmack/YADCFプラグインを使用しようとしています。YADCF を初期化すると、エラーが発生し続けます。

TypeError: oTable.settings is not a function
var instance = oTable.settings()[0].oInstance,

両方のプラグインを連携させる方法はありますか? 誰もこれを試しましたか?

以下は、cakephp-datatable を使用した DT 用の JS です。

$('.dataTable').each(function() {
    var table = $(this);
    var model = table.attr('data-config');
    var settings = dataTableSettings[model];
    settings['dom'] = 'lrtip';
    settings['stateSave'] = true;
    settings['stateSaveCallback'] = function (settings, data) {
                $.ajax( {...});
            };
    settings['stateLoadCallback'] = function (settings) {
            ...
            };
    table.dataTable(settings);
});

上記のコードの後に​​YADCFを機能させるために、このようなことを試してみましたが、常に同じエラーが発生しました。

var table = $('.dataTable');
yadcf.init(table, [
            {column_number: 0, filter_type: "text", filter_reset_button_text: false, filter_delay:500},
            ...,
            {column_number: 4, filter_type: "select", filter_default_label: "Select", filter_reset_button_text: false, filter_delay:500},
            {column_number: 5, filter_type: "range_number", filter_reset_button_text: false, filter_delay:500},
            ...,
        ]);

他のプラグインなしでこの YADCF コードを試してみましたが、問題なく動作します。そのため、コードを変更して他のプラグインで実装するための助けが必要です。

これも試しましたが(DTはdataTable()小文字の「d」を使用して初期化されたため)、機能しませんでした:

$('.dataTable').each(function() {
...
...
table.dataTable(settings)
        .yadcf([
                {column_number: 0, ...},
                ...
            ]);
});

PS:最初のプラグインの github でも質問しましたが、yadcf の作成者または経験豊富な人がここで私を助けてくれることを願っています。

4

1 に答える 1

1

以下を試してください(ループ/this使用法を削除しました)

var table;
var model = table.attr('data-config');
var settings = dataTableSettings[model];
settings['dom'] = 'lrtip';
settings['stateSave'] = true;
settings['stateSaveCallback'] = function (settings, data) {
            // Send an Ajax request to the server with the state object
            $.ajax( {
                "url": "/cake/Users/save_state",
                "data": data,
                "dataType": "json",
                "type": "POST",
                "success": function () {
                    console.log("ca");
                },
            });
        };
settings['stateLoadCallback'] = function (settings) {
        var o;

        // Send an Ajax request to the server to get the data. Note that
        // this is a synchronous request since the data is expected back from the
        // function
            $.ajax( {
                "url": "/cake/Users/get_state",
                "async": false,
                "dataType": "json",
                "success": function (json) {
                o = json;
                },
            });
        return o;
        };
table = $('.dataTable').DataTable(settings);

yadcf.init(table, [
    {column_number: 0, filter_type: "text", filter_reset_button_text: false, filter_delay:500},
    {column_number: 1, filter_type: "text", filter_reset_button_text: false, filter_delay:500},
    {column_number: 2, filter_type: "text", filter_reset_button_text: false, filter_delay:500},
    {column_number: 3, filter_type: "text", filter_reset_button_text: false, filter_delay:500},
    {column_number: 4, filter_type: "select", filter_default_label: "Select", filter_reset_button_text: false, filter_delay:500},
    {column_number: 5, filter_type: "range_number", filter_reset_button_text: false, filter_delay:500},
    {column_number: 6, filter_type: "select", filter_default_label: "Select", filter_reset_button_text: false, filter_delay:500},
]);

または、現在のコードを次のように変更できます

$('.dataTable').DataTable(settings); --> return $('.dataTable').DataTable(settings);

dtable('.dataTable'); --> var oTable = dtable('.dataTable');

于 2015-06-25T11:23:37.863 に答える