Related to YUI extended Gird component Part-1_YUI.Ext
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);
Copy after login -
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);
Copy after login - 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: Another method:
dm = new YAHOO.ext.grid.XMLDataModel({ tagName: 'Topic', totalTag: 'TotalCount', id: 'id', fields: ['title', 'author', 'totalPosts', 'lastPost', 'lastPoster'] });
Copy after logindm = new YAHOO.ext.grid.XMLDataModel({ tagName: 'Topic', id: 'id', fields: ['title', 'author', 'totalPosts', 'lastPost', 'lastPoster'] }); dm.getTotalRowCount = function(){ return 500; //或者是你要的数量 }
Copy after login - 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 });
.my-button{ background-image: url(../images/foo.gif); } .ytb-button-disabled .my-button{ background-image: url(../images/foo-disabled.gif); }
toolbar.addButton({ className: 'my-button', text: "New Foo", click: createFoo });
.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

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

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

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

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

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

Hot Topics











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.

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

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.

The main uses of JavaScript in web development include client interaction, form verification and asynchronous communication. 1) Dynamic content update and user interaction through DOM operations; 2) Client verification is carried out before the user submits data to improve the user experience; 3) Refreshless communication with the server is achieved through AJAX technology.

JavaScript's application in the real world includes front-end and back-end development. 1) Display front-end applications by building a TODO list application, involving DOM operations and event processing. 2) Build RESTfulAPI through Node.js and Express to demonstrate back-end applications.

Understanding how JavaScript engine works internally is important to developers because it helps write more efficient code and understand performance bottlenecks and optimization strategies. 1) The engine's workflow includes three stages: parsing, compiling and execution; 2) During the execution process, the engine will perform dynamic optimization, such as inline cache and hidden classes; 3) Best practices include avoiding global variables, optimizing loops, using const and lets, and avoiding excessive use of closures.

Python and JavaScript have their own advantages and disadvantages in terms of community, libraries and resources. 1) The Python community is friendly and suitable for beginners, but the front-end development resources are not as rich as JavaScript. 2) Python is powerful in data science and machine learning libraries, while JavaScript is better in front-end development libraries and frameworks. 3) Both have rich learning resources, but Python is suitable for starting with official documents, while JavaScript is better with MDNWebDocs. The choice should be based on project needs and personal interests.

Both Python and JavaScript's choices in development environments are important. 1) Python's development environment includes PyCharm, JupyterNotebook and Anaconda, which are suitable for data science and rapid prototyping. 2) The development environment of JavaScript includes Node.js, VSCode and Webpack, which are suitable for front-end and back-end development. Choosing the right tools according to project needs can improve development efficiency and project success rate.
