Цепочки со списком с возможностью выбора дочернего КБ без родителя
Так что в основном я пытаюсь сделать то же самое, что и в моем предыдущем вопросе - цепочка комбинированного списка показывает поле значений вместо поля отображения при изменении родительского cb, НО теперь я хочу иметь возможность выбирать дочернюю комбинацию без выбора родительской.
Вот что я сделал, чтобы сделать базовую фильтрацию, но я застрял, чтобы сделать возможным выбрать дочерний CB.
Ext.define('AppTest.CategoryViewModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.category',
stores: {
categories: {
fields: ['id', 'name'],
proxy: {
type: 'ajax',
url: 'categories.json',
reader: {
type: 'json'
}
}
},
users: {
storeId: 'userStore',
fields: ['id', 'category_id', 'number'],
autoLoad: true,
filters: [{
property:'category_id',
disabled: '{!categoryCombo.selection}',
//disableOnEmpty:true,
value: '{categoryCombo.selection.id}',
/*filter: function (item) {
var me = this,
filterFn = me._filterFn || me.getFilterFn(),
convert = me.getConvert(),
value = me._value;
me._filterValue = value;
console.log(value);
me.isDateValue = Ext.isDate(value);
if (me.isDateValue) {
me.dateValue = value.getTime();
}
if (convert && !me.preventConvert[me.getOperator()]) {
me._filterValue = convert.call(me.scope || me, value);
}
return filterFn.call(me.scope || me, item);
},*/
//extjs is seems to be bugged here, disable doesn't work without it.
updateDisableOnEmpty: function(disableOnEmpty) {
var disabled = this.getDisabled();
if (disableOnEmpty) {
disabled = Ext.isEmpty(this.getValue());
}
this.setDisabled(disabled);
}
//filterFn:function(item){
//console.log(new Error().stack);
//}
}],
proxy: {
type:'ajax',
url:'users.json',
reader: {
type:'json'
}
}
}
}
});
Что мне не хватает?
1 ответ
Решение
Сделал это сам.
Поэтому я должен был определить издателей в родительской конфигурации:
users: {
alias:'store.users',
fields: ['id', 'category_id', 'number'],
autoLoad: true,
filters: [{
property:'category_id',
value: '{categoryCombo.value}',
//disabled: '{!categoryCombo.selection}',
disableOnEmpty:true,
//filter: function (item) {
// var me = this,
// filterFn = me._filterFn || me.getFilterFn(),
// convert = me.getConvert(),
// value = me._value;
// me._filterValue = value;
// console.log(value);
// me.isDateValue = Ext.isDate(value);
// if (me.isDateValue) {
// me.dateValue = value.getTime();
// }
// if (convert && !me.preventConvert[me.getOperator()]) {
// me._filterValue = convert.call(me.scope || me, value);
// }
//
// return filterFn.call(me.scope || me, item);
//},
updateDisableOnEmpty: function(disableOnEmpty) {
var disabled = this.getDisabled();
if (disableOnEmpty) {
disabled = Ext.isEmpty(this.getValue());
}
this.setDisabled(disabled);
}
//filterFn:function(item){
//console.log(new Error().stack);
//}
}],
proxy: {
type:'ajax',
url:'resources/data/users.json',
reader: {
type:'json'
}
}
}
{
// store: 'categories',
bind: {
store: '{categories}'
},
xtype: 'combo',
reference: 'categoryCombo',
displayField: 'name',
valueField:'id',
publishes:'value',
name: 'category',
typeAhead: false,
fieldLabel: 'Category',
emptyText: 'Select a category...',
anchor: '95%'
},
{
xtype: 'combo',
name: 'user',
reference: 'userCombo',
fieldLabel: 'User',
displayField: 'number',
valueField: 'id',
hiddenName: 'id',
emptyText: 'Select a user...',
anchor: '95%',
//store: {
// type:'users'
//},
bind: {
fieldLabel: '{categoryCombo.selection.name}',
//filters: [{
// property:'category_id',
// value: '{categoryCombo.value}'
// //disabled: '{!categoryCombo.selection}',
// //disableOnEmpty:true
//}],
store: '{users}'
},
listeners: {
change: 'onSelectChange'
}
}
За кулисами, в чем разница между этой конфигурацией и хранилищем привязок? Как привязки влияют на производительность? это как угловой?