Tôi xây dựng ứng dụng ExtJS 4 của tôi theo cấu trúc MVC. Tôi muốn tạo một MyGrid lưới mở rộng với một số chức năng mà tôi có thể sử dụng lại nhiều lần. Vì vậy, tôi đoán, nó cần phải có bộ điều khiển riêng của nó mà cũng được mở rộng, để các chức năng được thừa hưởng. Làm thế nào là điều này đúng cách?Mở rộng bộ điều khiển trong ứng dụng ExtJS 4 MVC
Trong mã bên dưới, tôi minh họa cách tôi mở rộng bộ điều khiển MyGrid bằng MyExtendedGrid. Tôi nhận ra rằng tôi đang ghi đè hàm init trong bộ điều khiển MyGrid, để nó không bao giờ được gọi. Vấn đề có được giải quyết đơn giản bằng cách gọi "super" init trong MyGrid từ MyExtendedGrid init hoặc hợp nhất các đối tượng kiểm soát? Đó có phải là cách thích hợp để làm điều này trong tinh thần MVC không? Nếu vậy, làm thế nào?
điều khiển/MyGrid.js:
Ext.define('App.controller.MyGrid', {
extend: 'Ext.app.Controller',
refs: [
{
ref: 'myGridView',
selector: 'mygrid'
}
],
init: function() {
var me=this;
me.control({
'mygrid textfield[name=searchField]': {
change: function() {
var view = me.getMyGridView();
// Do something with view
}
}
});
}
});
điều khiển/MyExtendedGrid.js:
Ext.define('App.controller.MyExtendedGrid', {
extend: 'App.controller.MyGrid',
views: [
'grids.MyExtendedGrid'],
refs: [
{
ref: 'myExtendedGridView',
selector: 'myextendedgrid'
}
],
init: function() {
var me=this;
me.control({
'myextendedgrid': {
// Some control code
// Using getMyExtendedGridView()
}
});
}
});
xem/lưới/MyGrid.js:
Ext.define('App.view.grids.MyGrid', {
extend: 'Ext.grid.Panel',
alias : 'widget.mygrid',
requires: [
],
store: '', // Not defined here
columns: [ ], // Not defined here
initComponent: function() {
var me = this;
me.tbar = [
'Search',
{
xtype: 'textfield',
name: 'searchField',
hideLabel: true,
width: 150
}
];
me.callParent(arguments);
}
});
xem/lưới/MyExtendedGrid .js:
Ext.define('App.view.grids.MyExtendedGrid', {
extend: 'App.view.grids.MyGrid',
alias : 'widget.myextendedgrid',
store: 'MyStore',
columns: [
// ...
],
initComponent: function() {
var me = this;
me.bbar = [
//...
];
me.callParent(arguments);
}
});
Cảm ơn, bạn đã cho tôi một số cảm hứng .. – Louis
@sha Tôi thực sự sẽ thích nó nếu bạn đăng một hoặc hai đoạn mã. –
@LeviHackwith: không sao cả. chúng ta hãy làm điều này trong câu hỏi riêng biệt để chúng ta không nhầm lẫn điều này. muốn đăng câu hỏi mới? – sha