2012-04-03 8 views
0

ich die CreateEventLink Methode der ComponentResources Klasse bin mit behalten einen Link zu einem Löschereignis auf meiner Seite erstellen die folgenden genannte Userlist mit:fnStandingRedraw Aufruf der aktuelle Paginierung Einstellungen in Datentabellen mit javaScriptSupport.addInitializerCall

resources.createEventLink("delete", user.getUserId()).toURI(); 

Die UserList-Seite verwendet Datentabellen, um eine Liste der Benutzerdaten und einen Löschlink zu erstellen. Wenn auf den Link zum Löschen geklickt wird, wird das Lösch-Ereignis auf derselben Seite aufgerufen und alle sind zufrieden.

Das Problem ist die Datentabelle geht zurück auf die erste Seite der Datensätze nach einem Benutzer gelöscht wird. Wenn ich beispielsweise auf Seite 5 meiner Datentabelle auf der Seite Benutzerliste bin und auf Löschen klicke, bleibt sie auf der Seite Benutzerliste, aber meine Datentabelle wird auf die erste Seite zurückgesetzt.

Nach einigen Recherchen entdeckte ich haved, dass das fnStandingRedraw Plugin von Datentabellen wird dieses Problem beheben: http://datatables.net/plug-ins/api

Geht man durch die Dokumentation die ich gelernt habe, dass ich verwenden sollte:

javaScriptSupport.addInitializerCall("fnStandingRedraw", ""); 

rufen Sie die folgende in js-Datei über eine Import-Notation:

Tapestry.Initializer.fnStandingRedraw = function(oSettings) { 
    //redraw to account for filtering and sorting 
    // concept here is that (for client side) there is a row got inserted at the end (for an add) 
    // or when a record was modified it could be in the middle of the table 
    // that is probably not supposed to be there - due to filtering/sorting 
    // so we need to re process filtering and sorting 
    // BUT - if it is server side - then this should be handled by the server - so skip this step 
    if(oSettings.oFeatures.bServerSide === false){ 
     var before = oSettings._iDisplayStart; 
     oSettings.oApi._fnReDraw(oSettings); 
     //iDisplayStart has been reset to zero - so lets change it back 
     oSettings._iDisplayStart = before; 
     oSettings.oApi._fnCalculateEnd(oSettings); 
    } 

    //draw the 'current' page 
    oSettings.oApi._fnDraw(oSettings); 
}; 

jedoch habe ich den Fehler:

Uncaught TypeError: Cannot read property 'bServerSide' of undefined 
Tapestry.Initializer.fnStandingRedrawhelpdesk.js:16 
$.extend.inittapestry-jquery.js:32 
jQuery.extend.eachjquery-1.6.2.js:655 
$.extend.inittapestry-jquery.js:26 
jQuery.extend.eachjquery-1.6.2.js:649 
$.extend.inittapestry-jquery.js:18 
(anonymous function)list:70 
jQuery.extend._Deferred.deferred.resolveWithjquery-1.6.2.js:1008 
jQuery.extend.readyjquery-1.6.2.js:436 
DOMContentLoadedjquery-1.6.2.js:915 

Jede Anleitung würde am meisten geschätzt werden ... Vielen Dank im Voraus!

Antwort

2

Die beste Vorgehensweise ist Tables zu speichern Plugin js Datei zu trennen, so dass Sie es nicht nur durch Tapisserie initializer verwenden kann, sondern auch

var oTable = $('.dataTable').dataTable(); 
oTable.fnStandingRedraw(); 
: von anderen js .:

(function($) { 
    $.fn.dataTableExt.oApi.fnStandingRedraw = function(oSettings) { 
     if(oSettings.oFeatures.bServerSide === false){ 
      var before = oSettings._iDisplayStart; 

      oSettings.oApi._fnReDraw(oSettings); 

      // iDisplayStart has been reset to zero - so lets change it back 
      oSettings._iDisplayStart = before; 
      oSettings.oApi._fnCalculateEnd(oSettings); 
     } 

     // draw the 'current' page 
     oSettings.oApi._fnDraw(oSettings); 
    }; 
})(window.jQuery); 

so können Sie es von anderen Orten als verwenden

fnStandingRedraw() von Wandteppich nennen:

jsSupport.addScript("$(%s).dataTable().fnStandingRedraw()", "#myTable"); 

oder Sie können Tapisserie initializer hinzufügen und nennen es:

Tapestry.Initializer.standingRedraw = function(spec) { 
    $(spec.tableId).dataTable().fnStandingRedraw(); 
}; 

in java:

jsSupport.addInitializerCall("standingRedraw", 
    new JSONObject("tableId", "#myTable")); 

Aber dies nur für Sie arbeiten, wenn Ihre DataTable ist clientseitig (Paginierung, Sortierung, Filterung) und Sie führen eine Ajax-Anforderung zum Löschen einer Zeile aus und löschen diese Zeile manuell aus DataTable aus js.

0

Sie haben kein oSettings Objekt.

Sie können es von Datatable-Objekt aufrufen (die oSettings hat):

var dt = $("#table").dataTable(); 
dt.fnStandingRedraw(); 
Verwandte Themen