2009-05-14 42 views
0

我正在使用YUI 2.7.0,並且我已經獲得了客戶端分頁,並且現在正試圖獲取服務器端分頁(查詢可能會返回數以千計的結果)。目前,沒有結果顯示(我收到「找不到記錄」消息)。似乎無法在網上找到答案。對alert()的調用顯示正確的數字,所以我知道從服務器返回了一些內容。我懷疑這個問題是在jobsCallback或handleDataReturnPayload中,但是從那裏卡住了。任何提示?yui和服務器端分頁

function jobStatusFormatter(elCell, oRecord, oColumn, oData) 
    { 
    var messages = 
    [ 
    <c:forEach var="x" begin="0" end="17"> 
     "<fmt:message key="job.status.${x}"/>", 
    </c:forEach> 
    ]; 

    elCell.innerHTML = messages[oData]; 
    } 

    var jobColumns = 
    [ 
    {key:"lotNumber",    label:"<fmt:message key="job.lotNumber"/>",  sortable:true}, 
    {key:"scheduledStartDate",  label:"<fmt:message key="job.startDate"/>",  sortable:true, formatter:"date"}, 
    {key:"scheduledCompletionDate", label:"<fmt:message key="job.completionDate"/>", sortable:true, formatter:"date"}, 
    {key:"itemNumber",    label:"<fmt:message key="job.itemNumber"/>",  sortable:true}, 
    {key:"statusType",    label:"<fmt:message key="job.statusType"/>",  sortable:true, formatter:jobStatusFormatter}, 
    {key:"plannerCode",    label:"<fmt:message key="job.plannerCode"/>", sortable:true}, 
    {key:"scheduledGroup",   label:"<fmt:message key="job.scheduledGroup"/>", sortable:true}, 
    {key:"organization",   label:"<fmt:message key="job.organization"/>", sortable:true} 
    ]; 

    var jobsDataSource = new YAHOO.util.DataSource("<%=request.getContextPath()%>/secure/xml/jobs.do?"); 
    jobsDataSource.connMethodPost = true; 
    jobsDataSource.responseType = YAHOO.util.DataSource.TYPE_XML; 
    jobsDataSource.responseSchema = 
    { 
    resultNode: "job", 
    fields: 
    [ 
     "id", 
     "lotNumber", 
     "plannerCode", 
     "scheduledGroup", 
     "scheduledStartDate", 
     "scheduledCompletionDate", 
     "itemNumber", 
     "statusType", 
     "organization" 
    ], 
    metaNode: "jobs", 
    metaFields: 
    { 
     totalResultsAvailable : "totalResultsAvailable", 
     totalResultsReturned : "totalResultsReturned" 
    } 
    }; 

    var jobsConfigs = 
    { 
    initialLoad: false, 
    dynamicData: true, 
    paginator: new YAHOO.widget.Paginator(
    { 
     rowsPerPage:15, 
     rowsPerPageOptions : [15,25,50,100] 
    }) 
    }; 

    var jobsTable = new YAHOO.widget.DataTable("jobsDiv", jobColumns, jobsDataSource, jobsConfigs); 
    jobsTable.subscribe("rowMouseoverEvent", jobsTable.onEventHighlightRow); 
    jobsTable.subscribe("rowMouseoutEvent", jobsTable.onEventUnhighlightRow); 
    jobsTable.set("selectionMode","single"); 
    jobsTable.subscribe("rowClickEvent", function(args) 
    { 
    var target = args.target; 
    var record = this.getRecord(target); 

    window.location="job.do?id="+record.getData("id"); 
    });    
    jobsTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) 
    { 
    alert("totalResultsAvailable="+oResponse.meta.totalResultsAvailable+", totalResultsReturned="+oResponse.meta.totalResultsReturned); 
    oPayload.totalRecords = oResponse.meta.totalResultsAvailable; 
    return oPayload; 
    }; 

    var jobsCallback = 
    { 
    success : jobsTable.onDataReturnInitializeTable , 
    failure : jobsTable.onDataReturnInitializeTable , 
    scope : jobsTable 
    }; 

    function getQueryParams() 
    { 
    var form = document.forms[0]; 
    var lotNumber = form.lotNumber.value; 
    var itemNumber = form.itemNumber.value; 
    var plannerCode = form.plannerCode.value; 
    var scheduledGroup = form.scheduledGroup.value; 
    var statusType = form.statusType.value; 
    var organization = form.organization.value; 

    return "lotNumber="+lotNumber+ 
      "&itemNumber="+itemNumber+ 
      "&statusType="+statusType+ 
      "&plannerCode="+plannerCode+ 
      "&scheduledGroup="+scheduledGroup+ 
      "&organization="+organization; 
    } 

    /* Called when submit button pressed */ 
    function findJobs() 
    { 
    // Sends a request to the DataSource for more data 
    jobsTable.showTableMessage(YAHOO.widget.DataTable.MSG_LOADING); 
    jobsDataSource.sendRequest(getQueryParams(), jobsCallback); 
    } 

回答

3

您可能會在警報發生後立即收到錯誤消息,但它已被吞下。 FireBug在所有錯誤配置可以證實這一點。機會是oPayload是未定義的。它由回調對象中的參數屬性值設置。

所以,你應該能夠解決這個問題有

jobsCallback = { 
    success : jobsTable.onDataReturnInitializeTable, 
    failure : jobsTable.onDataReturnInitializeTable, 
    scope : jobsTable, 
    argument : {} 
}; 

jobsTable.handleDataReturnPayload = function(oRequest, oResponse, oPayload) { 
    oPayload = oPayload || {}; 
    oPayload.totalRecords = oResponse.meta.totalResultsAvailable; 
    return oPayload; 
}; 

HTH

+0

是的,這做到了。非常感謝! – 2009-05-15 01:07:02