Я использую ExtJS-построить нефильтруемую панель DataView, это моя панель: Panel.jsExtJS 6 ViewModel магазин переплетов и сеттера
Ext.define('myApp.view.main.widgets.Panel', {
extend: 'Ext.panel.Panel',
....
viewModel: {
type: 'widgets-view-model',
stores: {
widgets: {
type: 'widgets'
}
}
},
items: [{
xtype: 'searchfield',
name: 'widgets-filter',
height: 24,
width: '100%',
bind: {
store: '{store}'
}
}, {
margin: '5 0 0 0',
autoScroll: true,
bodyPadding: 1,
flex: 1,
frame: true,
referenceHolder: true,
bind: {
widgets: '{widgets.data.items}'
},
setWidgets: function (widgets) {
this.lookupReference('the-widget-items-panel').setWidgets(widgets);
},
items: [{
layout: {
type: 'vbox',
pack: 'start',
align: 'stretch'
},
items: [{
reference: 'the-widget-items-panel',
xtype: 'the-widgets'
}]
}]
}]
});
модель представление ничего не делает;
Ext.define('myApp.view.main.widgets.WidgetsViewModel', {
extend: 'Ext.app.ViewModel',
alias:'viewmodel.widgets-view-model'
});
В контроллере вида я делаю следующее в обработчике событий afterrender;
onAfterRender: function() {
var store = this.view.getViewModel().getStore('widgets');
store.load();
}
В этот момент виджет виджетов «setWidgets» вызывается как ожидалось. Однако, когда я фильтрую хранилище с использованием метода «filterBy» в хранилище, я ожидаю, что будет вызываться установщик виджетов «setWidgets», но это не так.
Я также попробовал сброс магазина, выполнив следующее;
store.removeAll();
store.load(function() {
console.log('reloaded...!')
});
, чтобы увидеть, если перезагрузка хранения данных вызовет виджеты сеттер «setWidgets», но это не так.
Похоже, изменения в магазине viewModel запускают только вызовы в сеттеры только один раз.
ВОПРОС:
- Является ли это особенность структуры или я конфигурированию вещи неправильно.
Как изменить конфигурацию view/store/viewModel так, чтобы вызывающий элемент «setWidgets» виджета вызывается для каждого обновления/изменения в хранилище, то есть когда;
- данные загружены
- магазин фильтруется
- хранилище данных изменяет
- обновления магазин