


An in-depth analysis of how to use the store grouping function in Extjs_javascript skills
During the project practice, I encountered the requirement to group the data in the grid according to a certain field. Of course, this function is available in the API and is listed here for everyone to find:
Two points to note:
1. When creating a store, you need to set the value of the groupField attribute, which is the value that needs to be grouped
for example:
JavaScript code
Ext.define('Person', { extend: 'Ext.data.Model', fields: ['name', 'sex'] });
In this data model, we need to group by gender, then please see the store below
JavaScript code
var PersonStore = Ext.create('Ext.data.Store', { storeId: 'PersonStore', model: 'Person', groupField: 'sex', data: [{ name: 'hongmei li', sex: 'female' },{ name: 'san zhang', sex: 'male' },{ name: 'Jim Green', sex: 'male' },{ name: 'Lily', sex: 'female' },{ name: 'Lucy', sex: 'female' }] });
Next, we need to define the tpl for group display
JavaScript code
var groupingFeature= Ext.create('Ext.grid.feature.Grouping',{ groupHeaderTpl: 'sex: {name} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})' });//注意其中{name}即为store中sex列所对应的值
In gridPanel, the code is as follows: Configure features as the groupingFeature defined above
JavaScript code
var grid = Ext.create('Ext.grid.Panel', { renderTo: Ext.getBody(), store: PersonStore, width: 600, height: 400, title: 'Person', features: [groupingFeature], columns: [{ text: 'Name', flex: 1, dataIndex: 'name' },{ text: 'sex', flex: 1, dataIndex: 'sex' }] });
The rendering is as follows:
Of course, after grouping is implemented, the sex column in the gridPanel does not need to be displayed.
It should be noted that if the data in the store changes, can the grouping be displayed normally?
Now add an itemclick event to the grid, the code is as follows:
JavaScript code
listeners:{ itemclick:function(thisview,record){ PersonStore.<span style="color:#ff0000;">add</span>([{name:"li",sex:"male"},{name:"zhang",sex:"female"}]); } }
The effect is as shown below
It can be seen that the interface is not what we want, so how to solve it? (The initial stupid solution was that I removed the gridPanel, destroyed it, and reloaded it) I made some changes to the code for listeners to listen to events
JavaScript code
listeners:{ itemclick: function (thisview,record){ PersonStore.loadData([{name: "li" ,sex: "male" },{name: "zhang" ,sex: "female" }], true ); } }
Look at the effect again:
This is the effect we want. When dynamically changing the data in the store, grouping must also be implemented instead of appending the data to the end of the gridPanel. The difference between these two pieces of code mainly lies in the method of adding data to the store. The former is add(record) and the latter is loadData(records,[append])
At first, I couldn’t understand why the same store added data, but the effect was different. See the explanation in the official documentation, add(), The new Model instances will be added at the end of the existing collection. (Add data to the collection. Finally) I suddenly realized that loadData loads data according to the rules of the store.
In addition, how to remove the oldest row in the group, I checked it myself, the document has been implemented, and I will share it with you here:
//Modify the previous listeners listening events as follows:
Pay attention to the first([boolean group]) method. If no parameters are passed, the first data in the store will be obtained. When the parameter is true, the store group will be returned with the group name key and the first data in the group. One piece of data is multiple objects of value. PersonStore.first(true).female gets the first piece of data in the female group. If you want to get the data in male, you can use PersonStore.first(true).male
JavaScript code
listeners:{ itemclick: function (thisview,record){ PersonStore.loadData([{name: "li" ,sex: "male" },{name: "zhang" ,sex: "female" }], true ); alert(PersonStore.first( true ).female.get( 'name' )); console.log(PersonStore.first( true ).female); PersonStore.remove(PersonStore.first( true ).female); // console.log(PersonStore.getAt(0)); } }
In order to prevent removedRecords from occupying memory, further processing has been carried out. The function can be implemented, but the method is a bit clumsy. If anyone has a good way, we can communicate
Look at the code:
listeners:{ itemclick:function(thisview,record){ PersonStore.loadData([{name:"li",sex:"male"},{name:"zhang",sex:"female"}],true); alert(PersonStore.first(true).female.get('name')); console.log(PersonStore.first(true)); PersonStore.remove(PersonStore.first(true).female); var recs = PersonStore.getRange(); console.log(recs); //PersonStore.removeAll(true);//这句有没有都可以 PersonStore.loadRecords(recs);//重新load数据,内存中记录的removed掉的就没有了 console.log(PersonStore); alert(PersonStore.getRemovedRecords.length);//这句alert结果为0 // console.log(PersonStore.getAt(0)); } }

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



Frequently Asked Questions and Solutions for Front-end Thermal Paper Ticket Printing In Front-end Development, Ticket Printing is a common requirement. However, many developers are implementing...

There is no absolute salary for Python and JavaScript developers, depending on skills and industry needs. 1. Python may be paid more in data science and machine learning. 2. JavaScript has great demand in front-end and full-stack development, and its salary is also considerable. 3. Influencing factors include experience, geographical location, company size and specific skills.

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.

How to merge array elements with the same ID into one object in JavaScript? When processing data, we often encounter the need to have the same ID...

Discussion on the realization of parallax scrolling and element animation effects in this article will explore how to achieve similar to Shiseido official website (https://www.shiseido.co.jp/sb/wonderland/)...

In-depth discussion of the root causes of the difference in console.log output. This article will analyze the differences in the output results of console.log function in a piece of code and explain the reasons behind it. �...

Learning JavaScript is not difficult, but it is challenging. 1) Understand basic concepts such as variables, data types, functions, etc. 2) Master asynchronous programming and implement it through event loops. 3) Use DOM operations and Promise to handle asynchronous requests. 4) Avoid common mistakes and use debugging techniques. 5) Optimize performance and follow best practices.

JavaScript can be run in PowerPoint, and can be implemented by calling external JavaScript files or embedding HTML files through VBA. 1. To use VBA to call JavaScript files, you need to enable macros and have VBA programming knowledge. 2. Embed HTML files containing JavaScript, which are simple and easy to use but are subject to security restrictions. Advantages include extended functions and flexibility, while disadvantages involve security, compatibility and complexity. In practice, attention should be paid to security, compatibility, performance and user experience.
