* sencha
component docs
https://docs.sencha.com/extjs/7.5.1/modern/Ext.dataview.Component.html
Ext.create({
xtype: 'componentdataview',
store: [
{ name: 'Peter', age: 26 },
{ name: 'Ray', age: 21 },
{ name: 'Egon', age: 24 },
{ name: 'Winston', age: 24 }
],
itemConfig: {
xtype: 'button',
viewModel: true, // enable per-record binding
bind: 'Go {record.name}!'
}
});
과제
store 사용해서 card component 생성하기
이해 안 된 부분
TopContainer.js 에 conponentdataview 코드 추가
xtype: 'componentdataview',
layout:{
type: 'hbox'
},
bind: {
store: `{mydbsstore}`
},
itemConfig: {
xtype: 'card-component',
viewModel: true,
}
CardComponent.js 코드 수정
items: [
{
html: '수익: 해설',
cls: 'text-top'
},
{
bind: {
html: `{record.title}`
},
cls: 'text-medium'
},
{
bind: {
html: `{record.transformTitle}`
},
cls: 'text-medium'
},
{
bind: {
html: `{record.progress}`
},
cls: 'text-bottom'
}
]
cf) 하나의 store를 사용하여 여러 분류로 나누고 싶을 때는 어떻게 해야하는지?
→ grouper 사용하면 가능
읽어보기
grouper docs
https://docs.sencha.com/extjs/7.5.1/modern/Ext.data.Store.html#cfg-grouper
data 파일 작성 코드
[
{
"id": 1,
"title": "내신 2023년 서울 양천구 목동고 고2공통 1학기기말 수학1",
"progress": 0
},
{
"id": 2,
"title": "내신 2023년 서울 양천구 목동고 고1공통 1학기기말 수학상",
"progress": 4
},
{
"id": 3,
"title": "내신 2023년 부산 동래구 동인고 고2공통 2학기기말 미적분",
"progress": 3
},
{
"id": 4,
"title": "내신 2023년 서울 양천구 목동고 고1공통 2학기중간 수학하",
"progress": 1
},
{
"id": 5,
"title": "내신 2022년 서울 양천구 광영여고 고1공통 2학기기말 수학하",
"progress": 2
},
{
"id": 6,
"title": "내신 2023년 안양 동안구 부흥고 고2공통 2학기중간 수학2",
"progress": 2
},
{
"id": 7,
"title": "내신 2023년 서울 서대문구 이화금란고 고1공통 1학기중간 수학상",
"progress": 2
}
]
model 파일 작성 코드
model docs
https://docs.sencha.com/extjs/7.5.1/modern/Ext.data.Model.html
Ext.define('MyApp.model.MyDB', {
extend: 'Ext.data.Model',
fields: [
// 각 field 정의
{ name: 'id', type: 'number' },
{ name: 'title', type: 'string' },
{ name: 'progress', type: 'int' },
{ name: 'transformTitle', calculate: function (data) {
let title = data.title;
title = title + ' progress: ' + data.progress;
return title;
} }
]
})
store 파일 작성 코드
store docs
https://docs.sencha.com/extjs/7.5.1/modern/Ext.data.Store.html
(질문) viewmodel에 alias 사용하는데 storeId는 왜 추가하는지?
Ext.define('MyApp.store.MyDBs', {
extend: 'Ext.data.Store',
alias: 'store.mydbs-store',
storeId: 'mydbs-store',
model: 'MyApp.model.MyDB',
proxy: {
type: 'ajax',
url: 'app/data/MyDBs.json',
reader: {
type: 'json',
}
},
sorters: [{
property: 'progress',
direction: 'DESC'
}],
autoLoad: true
})
TopContainerViewModel.js에 stores 추가
stores: {
mydbsstore: {
type: 'mydbs-store'
}
TopContainer.js 코드 수정
{
xtype: 'componentdataview',
layout:{
type: 'hbox'
},
bind: {
store: `{mydbsstore}`
},
itemConfig: {
xtype: 'card-component',
viewModel: true,
}
},