jquery는 이 점에서 정반대입니다. UI는 플러그인 형태로 제공됩니다. 필요한 것은 무엇이든 참조할 수 있으므로 매우 작고 유연합니다. 그러나 플러그인은 종종 다른 사람이나 팀에서 제공됩니다. , 인터페이스와 인터페이스는 종종 일관성이 없습니다. 어쨌든 각각의 장점이 있습니다.
오늘은 extjs에서 그리드를 배우고 있습니다. 생각지도 못할 일만 있고 할 수 없는 일이 있을 정도로 강력하고 독보적이라고 할 수 있습니다. 하하, 좀 과장된 것 같습니다. . 좋아요, 더 이상 고민하지 말고 가장 간단한 그리드부터 시작하여 extjs가 제공하는 그리드가 어떤 기능을 제공하는지 단계별로 살펴보겠습니다.
그리드는 일부 행과 열을 포함합니다. extjs에서 열은 Ext.grid.ColumnModel에 의해 관리됩니다. ColumnModel 객체를 생성하는 방법을 살펴보겠습니다.
var cm = new Ext.grid.ColumnModel([
{id:'company',header : "회사", 너비: 160, 정렬 가능: true, dataIndex: '회사'},
{header: "가격", 너비: 75, 정렬 가능: true, dataIndex: 'price'},
{header : "변경", 너비: 75, 정렬 가능: true, dataIndex: 'change'},
{header: "% 변경", 너비: 75, 정렬 가능: true, dataIndex: 'pctChange'},
{ header: "Last UPDATE", width: 85, sortable: true, dataIndex: 'lastChange'}
])
여기에는 5개의 열이 정의되어 있으며, 매개변수를 통해 열을 구성할 수 있습니다. : ID는 열을 식별하는 데 사용됩니다. CSS에서 이 ID를 사용하여 전체 열의 모든 셀에 대한 스타일을 설정합니다. 자동으로 확장 가능한 열도 이 ID에 따라 식별됩니다. 너비는 열의 너비입니다. sortable은 열을 정렬할 수 있는지 여부를 나타내는 데 사용됩니다(dataIndex). 지금은 무시하세요. 더 일반적으로 사용되는 매개변수에는 열이 편집 가능한지 여부를 나타내는 편집 가능, 열이 표시되는 방식을 나타내는 렌더러(나중에 자세히 소개됨)가 포함됩니다.
열을 포함하여 행을 채울 데이터가 여전히 필요합니다. 배열을 구성해 보겠습니다.
var myData = [
['3m Co',71.72,0.02,0.03,'9/1 12:00am'],
['Alcoa Inc ',29.01,0.42 ,1.47,'9/1 12:00am'],
['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am'],
['미국식 Express Company',52.55 ,0.01,0.02,'9/1 12:00am'],
['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am'],
['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am'],
['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am '],
['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am'],
['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am'] ,
['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am'],
['Exxon Mobil Corp',68.1,-0.43 ,-0.64,' 9/1 12:00am'],
['General Electric Company',34.14,-0.08,-0.23,'9/1 12:00am'],
['General Motors Corporation ',30.27,1.09 ,3.74,'9/1 12:00am'],
['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am'],
['Honeywell Intl Inc',38.77,0.05,0.13,'9/1 12:00am'],
['Intel Corporation',19.88,0.31,1.58,'9/1 12:00am'],
['국제 비즈니스 기계',81.41,0.44,0.54,'9/1 12:00am'],
['Johnson & Johnson',64.72,0.06,0.09,'9/1 12:00am'] ,
[ 'JP Morgan & Chase & Co',45.73,0.07,0.15,'9/1 12:00am'],
['McDonald's Corporation',36.76,0.86,2.40,'9/1 12 :00am'],
['Merck & Co., Inc.',40.96,0.41,1.01,'9/1 12:00am'],
['Microsoft Corporation',25.84,0.14,0.54, '9/1 12:00am'],
['Pfizer Inc',27.96,0.4,1.45,'9/1 12:00am'],
['The Coca-Cola Company',45.07,0.26 ,0.58,'9 /1 12:00am'],
['The Home Depot, Inc.',34.64,0.35,1.02,'9/1 12:00am'],
['The Procter & Gamble Company',61.91 ,0.01,0.02,'9/1 12:00am'],
['United Technologies Corporation',63.26,0.55,0.88,'9/1 12:00am'],
[ 'Verizon Communications', 35.57,0.39,1.11,'9/1 12:00am'],
['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am']
];
이제 모든 것이 준비되었으며, 다음 단계는 이를 그리드로 조합하는 것입니다. 전체 코드를 살펴보세요:
///
/**//*
*작성자: Daben
*날짜: 2009-10-13
*버전: 1.0
*/
Ext.onReady(function() {
//构造列
var cm = new Ext.grid.ColumnModel([
{ id: ' company', header: "회사", width: 160, sortable: true, dataIndex: 'company' },
{ header: "Price", width: 75, sortable: true, dataIndex: 'price' },
{ 헤더: "변경", 너비: 75, 정렬 가능: true, dataIndex: 'change' },
{ 헤더: "% 변경", 너비: 75, 정렬 가능: true, dataIndex: 'pctChange' },
{ 헤더: "마지막 업데이트", 너비: 85, 정렬 가능: true, dataIndex: 'lastChange' }
])
//构造数据
var myData = [
[' 3m Co', 71.72, 0.02, 0.03, '9/1 12:00am'],
['Alcoa Inc', 29.01, 0.42, 1.47, '9/1 12:00am'],
[' Altria Group Inc', 83.81, 0.28, 0.34, '9/1 12:00am'],
['American Express Company', 52.55, 0.01, 0.02, '9/1 12:00am'],
['American International Group, Inc.', 64.13, 0.31, 0.49, '9/1 12:00am'],
['AT&T Inc.', 31.61, -0.48, -1.54, '9/1 12: 00am'],
['Boeing Co.', 75.43, 0.53, 0.71, '9/1 12:00am'],
['Caterpillar Inc.', 67.27, 0.92, 1.39, '9/1 12:00am'],
['Citigroup, Inc.', 49.37, 0.02, 0.04, '9/1 12:00am'],
['E.I. du Pont de Nemours and Company', 40.48, 0.51, 1.28, '9/1 12:00am'],
['Exxon Mobil Corp', 68.1, -0.43, -0.64, '9/1 12:00am' ],
['General Electric Company', 34.14, -0.08, -0.23, '9/1 12:00am'],
['General Motors Corporation', 30.27, 1.09, 3.74, '9/1 12:00am'],
['Hewlett-Packard Co.', 36.53, -0.03, -0.08, '9/1 12:00am'],
['Honeywell Intl Inc', 38.77, 0.05, 0.13, '9/1 12:00am'],
['Intel Corporation', 19.88, 0.31, 1.58, '9/1 12:00am'],
['International Business Machines', 81.41, 0.44 , 0.54, '9/1 12:00am'],
['Johnson & Johnson', 64.72, 0.06, 0.09, '9/1 12:00am'],
['JP Morgan & Chase & Co ', 45.73, 0.07, 0.15, '9/1 12:00am'],
['McDonald's Corporation', 36.76, 0.86, 2.40, '9/1 12:00am'],
['Merck & Co., Inc.', 40.96, 0.41, 1.01, '9/1 12:00am'],
['Microsoft Corporation', 25.84, 0.14, 0.54, '9/1 12:00am'],
['화이자 주식회사', 27.96, 0.4, 1.45, '9/1 12:00am'],
['코카콜라 컴퍼니', 45.07, 0.26, 0.58, '9/1 12:00am'] ,
['The Home Depot, Inc.', 34.64, 0.35, 1.02, '9/1 12:00am'],
['The Procter & Gamble Company', 61.91, 0.01, 0.02, '9 /1 12:00am'],
['United Technologies Corporation', 63.26, 0.55, 0.88, '9/1 12:00am'],
['Verizon Communications', 35.57, 0.39, 1.11, ' 9/1 12:00am'],
['Wal-Mart Stores, Inc.', 45.45, 0.73, 1.63, '9/1 12:00am']
];
//构造grid
var Grid = new Ext.grid.GridPanel({
renderTo: "grid",
store: new Ext.data.ArrayStore({
fields: [
{ 이름: '회사' },
{ 이름: '가격', 유형: 'float' },
{ 이름: '변경', 유형: 'float' },
{ 이름: 'pctChange', 유형: 'float' },
{ 이름: 'lastChange', 유형: 'date', dateFormat: 'n/j h:ia' }
],
data:myData
}),
cm: cm,
stripeRows: true,
autoExpandColumn: 'company',
height: 350,
width: 600,
title: 'Array Grid'
});
})
extjs에서 Ext.grid.GridPanel은 구성을 위한 매개변수로 json 객체가 필요한 그리드를 나타냅니다.
renderTo: 그리드가 렌더링된 후 렌더링될 위치를 나타냅니다. 요소의 ID, Dom 노드 또는 Element 객체일 수 있습니다. 해당 매개변수가 없으면 Ext.grid.GridPanel의 render 메서드를 호출하여 그리드를 렌더링해야 합니다.
stroe: 통일된 인터페이스로 그리드에 데이터를 제공하는 ds로 축약될 수 있습니다. 우리는 데이터가 우리가 사용하는 배열 외에도 json, xml 등의 형식을 가질 수 있다는 것을 알고 있습니다. 그리드가 책임이 있는 경우 각 데이터 형식을 식별하는 것은 분명히 좋은 디자인 아이디어가 아니므로 extjs에 데이터 형식 변환을 담당하는 특수 클래스인 ArrayStore가 있습니다. 이름에서 알 수 있듯이 배열로의 변환에 특화된 것입니다. 우리는 Ext.data 네임스페이스 아래의 일부 클래스를 논의하기 위한 전용 시리즈를 갖고 Store 클래스에 대해 심층적으로 이해할 것입니다. 이제 우리는 Ext.data.Field 클래스의 컬렉션인 필드만 살펴봅니다. 이 클래스에는 name 속성이 있습니다. 이전에 ColumnModel에서 무시한 dataIndex는 해당 열과 해당 속성의 값을 인용했습니다. 필드. type 간의 관계는 유형을 나타내는 데 사용되며 기본값은 문자열 형식이며 dateFormat은 날짜 형식을 나타냅니다.
cm: colModel의 약어로 앞서 생성한 ColumnModel 객체를 여기에 넣으면 됩니다.
stripeRows: 줄무늬를 표시할지 여부입니다.
autoExpandColumn: 그리드의 빈 공간을 자동으로 채우는 자동 확장 열입니다.
높이 및 너비: 그리드의 높이와 너비입니다.
title: 그리드의 제목입니다.
이제 실행해 보면 이 그리드가 꽤 아름답다고 할 수 있습니다. 열 이름을 클릭하면 열의 너비도 자유롭게 드래그할 수 있고 위치도 변경할 수 있습니다. Ctrl 키를 누르면 여러 행을 선택할 수 있습니다. 컬럼 이름 위로 마우스를 가져가면 작은 역삼각형이 나타나는 것을 볼 수 있으며, 클릭하면 메뉴가 나타나며, 컬럼을 정렬하고 숨길 수 있는 것을 볼 수 있습니다. 그러나 날짜 표시가 만족스럽지 않고 백분율이 여전히 부동 소수점 숫자이며 일반적으로 손실을 나타내기 위해 적자를 사용하거나 그리드에 있는 경우 마이너스 성장이 발생할 수 있음을 확인했습니다. 또한 적자로 표현되면 효과가 더 좋아질 것입니다. extjs는 우리의 아이디어를 실현하는 데 매우 편리한 렌더러를 제공합니다. ColumnModel에서는 원하는 효과를 얻기 위해 필요한 열에 렌더러를 추가할 수 있습니다. 수정된 ColumnModel은 다음과 같습니다.
// 열 구성
var cm = new Ext.grid.ColumnModel([
{ id: 'company', header: "Company", width: 160, sortable: true, dataIndex: 'company' },
{ 헤더: "가격", 너비: 75, 정렬 가능: true, dataIndex: 'price' },
{ 헤더: "변경", 너비: 75, 정렬 가능: true, dataIndex: '변경', 렌더러: 변경 } ,
{ 헤더: "% 변경", 너비: 75, 정렬 가능: true, dataIndex: 'pctChange', 렌더러: pctChange },
{ 헤더: "마지막 업데이트", 너비: 120, 정렬 가능: true, dataIndex: ' lastChange',renderer:Ext.util.Format.dateRenderer("Y-m-d h:i") }
])
// 열 렌더러 변경 함수
functionchange(val) {
if (val > 0) {
return '' val ''
} else if (val return '' val ''
}
return val;
}
// % 변경 렌더러 함수
function pctChange(val) {
if (val > 0) {
return '' val '%' ;
} else if (val '' val '%'
값 반환
}
렌더러는 데이터를 표시하기 전에 데이터를 변환하는 데 사용되는 "인터프리터" 방법으로 이해될 수 있습니다. 렌더러를 구현하는 방법에는 세 가지가 있습니다.
HTML 마크업을 반환하는 렌더러 함수 사용
렌더러 함수를 제공하는 Ext.util.Format 클래스의 속성
렌더러 함수와 범위를 포함하는 객체
이 예에서는 처음 두 가지 방법을 사용합니다. 렌더러 함수는 6개의 매개변수를 전달하고 셀의 모든 정보를 저장합니다. 여기서는 첫 번째 매개변수만 사용되며, 이는 셀의 값을 저장합니다. 다른 매개변수의 의미는 도움말 문서를 참조할 수 있습니다.
이제 프로그램을 실행하면 원하는 효과를 볼 수 있습니다. 마이너스 성장은 적자로 표시되고, 플러스 성장은 녹색으로 표시되며 시간도 원하는 형식으로 표시됩니다.
때때로 각 행에 번호를 매기고 싶을 때도 있습니다. 이는 구현하기 쉽습니다. ColumnModel의 생성자에 new Ext.grid.RowNumberer()만 추가하면 됩니다.
var cm = new Ext.grid.ColumnModel([
new Ext.grid .RowNumberer( ), //자동 번호 매기기 구현
{ id: 'company', header: "Company", width: 160, sortable: true, dataIndex: 'company' },
{ header: "Price" , width: 75, 정렬 가능: true, dataIndex: 'price' },
{ 헤더: "변경", 너비: 75, 정렬 가능: true, dataIndex: '변경', 렌더러: 변경 },
{ 헤더: "% 변경", 너비: 75, 정렬 가능: true, dataIndex: 'pctChange', 렌더러: pctChange },
{ 헤더: "마지막 업데이트", 너비: 120, 정렬 가능: true, dataIndex: 'lastChange', 렌더러:Ext .util.Format.dateRenderer("Y-m-d h:i") }
]);
Ext.grid.GridPanel 구성에는 일반적으로 사용되는 두 가지 매개 변수가 있습니다.
viewConfig : 이 매개변수를 사용하여 그리드 인터페이스에 대한 일부 설정을 지정할 수 있습니다. 자세한 내용은 도움말 문서를 참조하세요.
selModel : sm으로 줄여서 쓸 수 있으며, 셀 선택, 행 전체 선택 등 모델을 선택하는 것이 기본값입니다.

보다 효율적인 코드를 작성하고 성능 병목 현상 및 최적화 전략을 이해하는 데 도움이되기 때문에 JavaScript 엔진이 내부적으로 작동하는 방식을 이해하는 것은 개발자에게 중요합니다. 1) 엔진의 워크 플로에는 구문 분석, 컴파일 및 실행; 2) 실행 프로세스 중에 엔진은 인라인 캐시 및 숨겨진 클래스와 같은 동적 최적화를 수행합니다. 3) 모범 사례에는 글로벌 변수를 피하고 루프 최적화, Const 및 Lets 사용 및 과도한 폐쇄 사용을 피하는 것이 포함됩니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

Python과 JavaScript는 커뮤니티, 라이브러리 및 리소스 측면에서 고유 한 장점과 단점이 있습니다. 1) Python 커뮤니티는 친절하고 초보자에게 적합하지만 프론트 엔드 개발 리소스는 JavaScript만큼 풍부하지 않습니다. 2) Python은 데이터 과학 및 기계 학습 라이브러리에서 강력하며 JavaScript는 프론트 엔드 개발 라이브러리 및 프레임 워크에서 더 좋습니다. 3) 둘 다 풍부한 학습 리소스를 가지고 있지만 Python은 공식 문서로 시작하는 데 적합하지만 JavaScript는 MDNWebDocs에서 더 좋습니다. 선택은 프로젝트 요구와 개인적인 이익을 기반으로해야합니다.

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Dreamweaver Mac版
시각적 웹 개발 도구
