MVJ 패턴을 사용하여 ExtJs에 익숙해졌으며 MVVM 패턴을 구현하려고합니다. 내 견해에 상점을 묶을 수 없습니다.ViewModel에 상점을 바인딩하려고 시도합니다.
주 그리드가 있는데 선을 선택할 때 세부 그리드를 열려고합니다.
detailsView = mainPanel.add({
xtype: 'rma-details',
viewModel: {data: {id: id}}
})
Ext.define('Mb.view.rma.Details', {
extend: 'Ext.grid.Panel',
alias: 'widget.rma-details',
requires: [
'Mb.view.rma.DetailsController',
'Mb.view.rma.DetailsModel'
],
controller: 'rma-details',
viewModel: {type: 'rma-details'},
bind: {
title: 'Retour n° {id}',
store: '{details}'
},
(...)
});
Ext.define('Mb.view.rma.DetailsModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.rma-details',
requires: ['Mb.model.rma.Detail'],
data: {
id: 0
},
stores:{
details: {
model: 'rma.Detail',
filters: [{
property: 'rma',
value: '{id}'
}]
}
}
});
Ext.define('Mb.model.rma.Detail', {
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'int'},
{name: 'rma', type: 'int'},
(...)
],
proxy: { // cf. 2nd subsidiary question
(...)
}
});
보기의 제목은 정확하게 id
의 값으로 바운드됩니다.
그러나 상점
, 나는 오류를 얻을 : 모델 (model: 'rma.Detail'
)에 대한 참조가 뷰 모델에서 인식되지 않는 이유
[E] Ext.data.schema.Schema.lookupEntity(): No such Entity "rma.Detail".
Uncaught Error: No such Entity "rma.Detail".
내가 이해가 안 돼요. 모델을 참조 할 필요가없는 MVC 패턴을 사용하여 항상 rma.Details
과 유사한 참조를 사용하여 저장소를 참조했습니다.
주요 질문은 다음과 같습니다. ViewModel에서 모델 rma.Details
을 어떻게 선언해야합니까?
자회사 질문은 다음과 같습니다
- 이보기에 값
id
을 설정하려면이 올바른 방법입니다. ({xtype: 'rma-details', viewModel: {data: {id: id}}}
)? - 저는 항상 저장소 클래스에 프록시를 정의하는 데 사용됩니다. 여기에는 ViewModel에 정의되어 있으므로 저장소 클래스가 없습니다. 위와 같이 모델 클래스에서 선언하는 것이 맞습니까?
연결하려는 의사의 말 : * 기본적으로이 클래스의 단일 인스턴스가 만들어집니다 *. 그렇다면 스키마를 정의해야하는 이유는 무엇입니까? 모델에'schema : {namespace : 'Mb.model'}'을 추가하면 문제를 해결할 수 있습니까? –
예, 문제가 해결됩니다. 기본 인스턴스에 네임 스페이스 구성이 지정되지 않았습니다. 스키마를 선언하지 않으려면 저장소 선언에서 모델의 전체 클래스 이름을 지정할 수 있습니다. – scebotari66
내 ViewModel에서'모델 : 'rma.Detail''을'store :'rma.Details''로 바꿨으므로 더 이상 스키마 선언이 필요하지 않습니다. 하지만 이제는 또 다른 문제가 있습니다.'rma.Details' 저장소가'remoteFilter : true, autoLoad : true'로 구성되어 있어도로드되지 않습니다. –