我的代码如下所示。我正在使用 structs 操作从服务器端获取 json 记录。它返回的记录很好,我可以看到带有数据的表格。分页链接创建得很好。当我单击下一步时,每次单击分页上的任何链接都会调用数据源。如果我也单击列标题,则正在调用数据源。
我的问题是:
1)当数据源被调用时。因为我看到有时会打电话,有时不会。就像当我从 1page 到 2page 时,数据源被称为很好。当我通过单击“上一个”链接返回上一页时,正在调用数据源。但之后,如果我再次单击下一步转到第二页,则不会调用数据源。何时调用数据源以及调用多少次。是否适用于分页调用数据源中的每个链接?
2)如果我的数据源返回 100 条数据记录并且我的每页记录设置为 25,那么我是否看到 4 页。我在这里对服务器端分页和数据源调用感到困惑。没有为每个页面链接和下一个或上一个链接点击调用数据源?如果没有,何时调用数据源?请解释一下。我知道一开始有多少条记录,我的要求是当用户点击页码或下一个或上一个链接时每页显示 25 条记录。我有能力根据服务器端的页码带来相应的 25 条记录。
3)如何捕获分页上的“下一个”和“上一个”点击。
我的要求是每当用户单击页码链接或下一个或上一个时,使用来自服务器的数据源动态获取 json 数据。
这个你能帮我吗。我是 YUI 的新手。我只需要用户 YUI 2,因为我们已经在使用它。
<div id="dynamicdata"></div>
<script type="text/javascript">
YAHOO.example.DynamicData = function() {
var myColumnDefs = [ // sortable:true enables sorting
{key:"PIN", label:"PIN", sortable:true},
{key:"CODE", label:"CODE", sortable:true}
];
// Customize request sent to server to be able to set total # of records
var generateRequest = function(oState, oSelf) {
// Get states or use defaults
oState = oState || { pagination: null, sortedBy: null };
var sort = (oState.sortedBy) ? oState.sortedBy.key : "PIN";
var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc";
var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
var results = (oState.pagination) ? oState.pagination.rowsPerPage : 25;
var total = YAHOO.util.Dom.get("total").value *1;
// Validate input
if(!YAHOO.lang.isNumber(total) || total < 0 || total > 200) {
YAHOO.util.Dom.get("total").value = 0;
total = 0;
alert("Total must be between 0 and 200.");
}
// Build custom request
return "sort=" + sort +
"&dir=" + dir +
"&startIndex=" + startIndex +
"&results=" + (startIndex + results) +
"&total=" + total;
};
// DataTable configuration
var myConfigs = {
generateRequest: generateRequest,
initialRequest: generateRequest(), // Initial request for first page of data
dynamicData: true, // Enables dynamic server-driven data
sortedBy : {key:"PIN", dir:YAHOO.widget.DataTable.CLASS_ASC}, // Sets UI initial sort arrow
paginator: new YAHOO.widget.Paginator({ rowsPerPage:10 }) // Enables pagination
};
var myDataSource = new YAHOO.util.DataSource("<%=request.getContextPath()%>/results.do?startIndex="+localStartIndex+"&rowsPerPage="+rowsPerPage);
myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
myDataSource.responseSchema = {
resultsList: "data",
fields: [
{key:"SSN"},
{key:"PIN"}
]
}
var myDataTable = new YAHOO.widget.DataTable("dynamicdata", myColumnDefs, myDataSource, myConfigs);
// DataTable instance
var myDataTable = new YAHOO.widget.DataTable("dynamicdata", myColumnDefs, myDataSource, myConfigs);
// Update totalRecords on the fly with values from server
myDataTable.doBeforeLoadData = function(oRequest, oResponse, oPayload) {
oPayload.totalRecords = 200;
return oPayload;
};
return {
ds: myDataSource,
dt: myDataTable
};
}();