TopContainerViewModel.js 코드
Ext.define('MyApp.view.main.containerBox.TopContainerViewModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.top-container-viewmodel',
data : {
데이터 목록 작
}
})
TopContainer.js에 코드 추가
Ext.define('MyApp.view.main.containerBox.TopContainer', {
extend: 'Ext.Container',
alias: 'widget.top-container',
cls: 'top-container',
controller: {
type: 'top-container-controller'
},
viewModel: {
type: 'top-container-viewmodel'
},
layout: 'hbox',
items: [
{
...
}]
});
예시
bind: {
text: `{'isHidden ? '감추기' : '나타내기'}`
}
cf) scss는 css의 전처리기이다
코드(cls가 left-container인 곳에서 ui: ‘first-ui’ 하면 적용됨)
.left-container {
@include button-ui (
$ui: 'first-ui',
$background-color:
)
}
과제
로딩체크박스가 체크되면
로딩체크박스가 해제되면
첫 코드
xtype: 'container',
layout: 'hbox',
items: [
{
xtype: 'button',
bind:{
text: `{isChecked ? 'isLoading...' : 'active'}`,
disabled: '{isChecked}',
cls: `{ischecked ? 'top-button checked' : 'top-button unchecked'}`,
ui: `{isChecked ? 'disabled' : 'active'}`
},
handler: 'onToggleButtonClicked'
},
{
xtype: 'checkboxfield',
boxLabel: 'LoadingCheckBox',
bind:{
checked: '{isChecked}'
}
}
]
.top-button .checked {
@include button-ui (
$ui: 'disabled',
$background-color: lightgrey
)
}
.top-button .unchecked {
@include button-ui (
$ui: 'active',
$background-color: lightgreen
)
}
틀린 부분
수정 후 코드
xtype: 'container',
layout: 'hbox',
items: [
{
xtype: 'button',
bind: {
text: `{isChecked ? 'isLoading...' : 'active'}`,
disabled: '{isChecked}',
ui: `{isChecked ? 'disabled' : 'active'}`
},
handler: 'onToggleButtonClicked'
},
{
xtype: 'checkboxfield',
boxLabel: 'LoadingCheckBox',
bind:{
checked: '{isChecked}'
}
},
]
.left-container {
@include button-ui (
$ui: 'disabled',
$background-color: lightgrey
);
@include button-ui (
$ui: 'active',
$background-color: lightgreen
)
}
달라진 곳
추가 설명
two-way bind : 같은 data를 공유하는 bind를 만들면 바뀐 data가 알아서 저장되어서 다른 쪽 bind에도 영향을 줄 수 있다.
bind 대신 listener와 controller 이용하는 코드
onCheckBoxChanged: function(checkbox, newValue, oldValue) {
this.getViewModel().set('isChecked',newValue);
},
xtype: 'checkboxfield',
boxLabel: 'LoadingCheckBox',
listeners: {
change: 'onCheckBoxChanged'
}