DataTable + JEditable + AutoComplete (BAssistance) + Обработка на стороне сервера - PullRequest
4 голосов
/ 15 июня 2010

После почти трудной недели я смог сделать DataTable + JEditable + AutoComplete (BAssistance) с обработкой на стороне сервера, используя Json для работы. Я думал, что это будет полезно кому-то там.

$(document).ready(function() {
    $('#example tbody td').editable(
        function(value, settings) {
            processEventForTable(this, value);
            return(value);
        },
        "height": "20px"
    });
    oTableexample = $('#example').dataTable({
        "bInfo": true,
        "bProcessing" : true,
        "bServerSide" : true,
        "sAjaxSource" : "GetPaginationData.aspx",
        "sPaginationType": "full_numbers",
        "bPaginate"      : true,
        "fnServerData": function ( sSource, aoData, fnCallback ) {
            var data = {"name" : "kObjectId",
            "value" : definitionId};
            aoData.push(data);
            data =  { "name" : "ObjectName", "value" : "example" };
            aoData.push(data);
            data = { "name" : "InstanceId", "value" : instanceId };
            aoData.push(data);
            data = { "name" : "IsNewRequest", "value" : IsNewRowAdded};
            IsNewRowAdded = 0;
            aoData.push(data);
            debugger;
            $.ajax( {
                "dataType": 'json',
                "type": "Get",
                "url": sSource,
                "data": aoData,
                "success": fnCallback
            });
        },
        "fnDrawCallback" : function() {
            debugger;
            SetDataTableIDAndAttachJEditable("example");
            $('#example tbody td').editable( function(value, settings)
            {
                var aPos = oTableexample.fnGetPosition( this );
                processEventForTableNew(aPos[0], aPos[1], value, "example");
                return(value);
            }
            );
        }
    });
    $.editable.addInputType('autocomplete', {
        element : $.editable.types.text.element,
        plugin : function(settings, original) {
            $('input', this).autocomplete(settings.autocomplete.url, {
                dataType:'json',
                parse : function(data) {
                    return $.map(data, function(item) {
                        return {
                            data : item,
                            value : item.Key,
                            result: item.value
                        }
                    })
                },
                formatItem: function(row, i, n) {
                    return row.value;
                },
                mustMatch: false,
                focus: function(event, ui) {
                    $('#example tbody td[title]').val(ui.item.label);
                    return false;
                }
            });
        }
    });
    $("#example tbody td > span[title]").editable(
        function(value,settings){
            return value;
        },
        {
            type      : "autocomplete",
            tooltip   : "Click to edit...",
            autocomplete : {
                url : "autocompleteeg.aspx"
            }
        }
    );
});

Этот код прекрасно работает.

В DataTables используется обработка на стороне сервера. И я отправляю изменения в JEditable в функцию javascript. После этого я отправляю на сервер весь массив изменений.

Этот код стал слишком длинным, кто-нибудь может мне помочь с его рефакторингом. Если есть какой-то лучший способ сделать то же самое, то я жду этого. :)

1 Ответ

1 голос
/ 15 июня 2012

Да, крутой чувак!Просто небольшая синтаксическая ошибка в вашем коде.

} , {  // opening bracket missing
    "height": "20px"
}

Большое спасибо

...