Article date: 2006/9/26
The new version of GIRD can support remote data. The settings for paging and remote sorting are easy to understand. I will explain some other commonly used custom parameters in this post. The new forum interface (under construction) is a good example of paging and remote sorting, and the code for this article comes from that example.
New methods and properties
Using LoadableDatatModel object (the parent class of XMLDataModel and JSONDataModel) to implement paging and remote sorting, there are several new methods and properties.
The following variable "dm" refers to an instance of DataModel.
Method
-
initPaging(url, pageSize, baseParams) The most important method for realistic paging. Using this method, you can initialize paging once. For information about parameters, see the related properties below. Example fourm.js usage:
dm.initPaging('topics.php', 20);
-
loadPage(pageNum, callback, keepExisting)Load a new page. Your callback will be called after the data has been loaded. "keepExisting" determines whether to overwrite the current data or add new data to the existing data. Example fourm.js usage:
// the grid is ready, load page 1 of topics dm.loadPage(1);
- isPaged()Returns whether paging is activated;
-
getTotalRowCount()Returns the total number of records available (the total number of record) XMLDataModel has a new attribute "totalTag", which is used to get the total number of rows. The total number of rows is returned by the server to the value of the "totalTag" node in the generated XML document. This is a way to let the DataModel know how many records there are. If you want to specify a certain total, you can use getTotalRowCount to override the total when Gird is initialized. forum.js uses the default method:
dm = new YAHOO.ext.grid.XMLDataModel({ tagName: 'Topic', totalTag: 'TotalCount', id: 'id', fields: ['title', 'author', 'totalPosts', 'lastPost', 'lastPoster'] });
Another method:dm = new YAHOO.ext.grid.XMLDataModel({ tagName: 'Topic', id: 'id', fields: ['title', 'author', 'totalPosts', 'lastPost', 'lastPoster'] }); dm.getTotalRowCount = function(){ return 500; //或者是你要的数量 }
- getPageSize()Returns the configured page size
- getTotalPages() Use page size and total rows to calculate the number of available pages.
- pageSize - Number of records per page. It can be set in the initPaging parameter or directly.
- pageUrl - the URL called, return data. It can be set in the initPaging parameter or directly.
// 调用“/data.php”产生所有分页、排序 dm.pageUrl = '/data.php'; //这种方式也不错 dm.initPaging('/foo.php', 50);
- remoteSort - Type: Boolean True value activates remote sorting. If you use the initPaging() method above, this will automatically be set to TRUE, otherwise it defaults to false.
- baseParams - Type: Object. An object composed of "key, key value name/value" will be included in every paging and sorting request. In the forum I use this to pass the selected forumId to my data script:
// 传入已选择好forumId的值,产生所有分页、排序 dm.baseParams['forumId'] = forumId;
- paramMap - type Object. The model adds paging and sorting requests, and by default passes the following parameters: page, pageSize, sortColumn and sortDir. If you don't want to use these parameter names, you can rename them through the map parameters. For example:
//"page"改名为"pageNum" myDataModel.paramMap['page'] = 'pageNum';
Group all functions together
This is the process of creating a Gird, and the paging code:
// 限制选区只是一行 sm = new YAHOO.ext.grid.SingleSelectionModel(); // 监听选区改变 sm.addListener('selectionchange', onSelection); // 创建我们的column model cm = new YAHOO.ext.grid.DefaultColumnModel([ {header: "Topic", width: 330}, {header: "Author", width: 100}, {header: "Posts", width: 40}, {header: "Last Post", width: 150}, {header: "Last User", width: 120} ]); //这个属性设置默认的排序,免得在每个column上设置。 cm.defaultSortable = true; // 创建数据模型data model。注意"totalTag"条目。它告诉model去寻找该节点下全部的纪录。 dm = new YAHOO.ext.grid.XMLDataModel({ tagName: 'Topic', totalTag: 'TotalCount', id: 'id', fields: ['title', 'author', 'totalPosts', 'lastPost', 'lastPoster'] }); // 初始化分页 dm.initPaging('topics.php', 20); //设置我们想转入的附加参数(可作为第三个参数传入到inirPaing) dm.baseParams = {'forumId': 4}; dm.setDefaultSort(cm, 3, 'DESC'); //当每次新数据加载后,选择GIRD的第一行 dm.addListener('load', sm.selectFirstRow, sm, true); // 创建grid对象 grid = new YAHOO.ext.grid.Grid('topics-grid', dm, cm, sm); grid.render(); //分页工具条,下面将会分析 var toolbar = grid.getView().getPageToolbar(); toolbar.addSeparator(); toolbar.addButton({ className: 'new-topic-button', text: "New Topic", click: createTopic }); // 当gird准备好,加载话题的第一项 dm.loadPage(1);
Paging Toolbar
Since paging buttons are more commonly used, I decided to write a simple toolbar component to implement paging. The YAHOO.ext.Toolbar released this time is very simple and provides some methods to implement paging of the toolbar. Button setting is done with CSS. The icon ICON should be a 16X16 standard picture. If not, the image will be cut. Example of adding a button:
toolbar.addButton({ className: 'my-button', tooltip: "New Foo", click: createFoo });ENABLE/DISABLED icon in CSS:
.my-button{ background-image: url(../images/foo.gif); } .ytb-button-disabled .my-button{ background-image: url(../images/foo-disabled.gif); }Create an ICON with text (JS writing is as in the above example):
toolbar.addButton({ className: 'my-button', text: "New Foo", click: createFoo });But CSS writing is a bit complicated:
.ytoolbar .my-button{ background-image: url('images/foo.gif'); background-position: 0px 0px; background-repeat: no-repeat; padding-left:18px; padding-top:1px; width:auto; display:block; }
To customize the toolbar with a lot of icons, the best thing is css sprite. The paging icon of the new version of GIRD may use CSS Sprite.
The next step is. .
In the next post, I will talk about drag-and-drop of grid and drag-and-drop between two grids.
Jack

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

JavaScript's applications in the real world include server-side programming, mobile application development and Internet of Things control: 1. Server-side programming is realized through Node.js, suitable for high concurrent request processing. 2. Mobile application development is carried out through ReactNative and supports cross-platform deployment. 3. Used for IoT device control through Johnny-Five library, suitable for hardware interaction.

I built a functional multi-tenant SaaS application (an EdTech app) with your everyday tech tool and you can do the same. First, what’s a multi-tenant SaaS application? Multi-tenant SaaS applications let you serve multiple customers from a sing

This article demonstrates frontend integration with a backend secured by Permit, building a functional EdTech SaaS application using Next.js. The frontend fetches user permissions to control UI visibility and ensures API requests adhere to role-base

JavaScript is the core language of modern web development and is widely used for its diversity and flexibility. 1) Front-end development: build dynamic web pages and single-page applications through DOM operations and modern frameworks (such as React, Vue.js, Angular). 2) Server-side development: Node.js uses a non-blocking I/O model to handle high concurrency and real-time applications. 3) Mobile and desktop application development: cross-platform development is realized through ReactNative and Electron to improve development efficiency.

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Linux new version
SublimeText3 Linux latest version

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.