tôi đã tìm thấy lý do (trần với tôi):
https://docs.sencha.com/extjs/6.0/6.0.2-classic/source/Controller2.html#Ext-app-Controller
xem:
onClassExtended -> Controller.resolveNamespace -> Ext.app.getNamespace
Đó là những điều quan trọng, khi không gian tên được giải quyết, có một cuộc gọi để xử lý các phụ thuộc:
Controller.processDependencies(proto, requires, namespace, 'store', data.stores);
tôi nghiên cứu này và Ext.app.getNamespace là giống hệt nhau trong ext 5 và 6
vậy tại sao là nó trong ExtJs 5
Ext.getNamespace("MyApp.controller.SomeController"); // returns MyApp
và trên ExtJs 6
Ext.getNamespace("MyApp.controller.SomeController"); // returns MyApp.controller
Lý do được tìm thấy bởi bảng điều khiển.đăng nhập Ext.ClassManager.paths
bây giờ có một entry mới tương ứng với MyApp.controller
trước đây không có chìa khóa cho MyApp.controller (ZHT.controller)
Và những gì Ext.getNameSpace không được tìm kiếm ' prefix sâu nhất' như bạn có thể thấy ở đây http://docs.sencha.com/extjs/6.0/6.0.2-classic/source/Util.html#Ext-app-Util
[cập nhật] vì vậy, một điều mà có thể được thực hiện là để ghi đè lên các phương pháp resolveNamespace tĩnh như thế này:
statics: {
resolveNamespace: function(cls, data) {
var Controller = Ext.app.Controller,
namespaceRe = cls.prototype.isProfile ? Controller.profileRegex : Controller.controllerRegex,
className, namespace, match;
/*
* Namespace resolution is tricky business: we should know what namespace
* this Controller descendant belongs to, or model/store/view dependency
* resolution will be either ambiguous or plainly not possible. To avoid
* guessing games we try to look for a forward hint ($namespace) that
* Application class sets when its onClassExtended gets processed; if that
* fails we try to deduce namespace from class name.
*
* Note that for Ext.app.Application, Controller.onClassExtended gets executed
* *before* Application.onClassExtended so we have to delay namespace handling
* until after Application.onClassExtended kicks in, hence it is done in this hook.
*/
className = Ext.getClassName(cls);
namespace = data.$namespace || data.namespace ||
Ext.app.getNamespace(className) ||
((match = namespaceRe.exec(className)) && match[1]);
//<debug>
if (!namespace) {
Ext.log.warn("Missing namespace for " + className + ", please define it "+
"in namespaces property of your Application class.");
}
//</debug>
//This is the only change on this override.
//http://stackoverflow.com/questions/37731213/extjs-6-stores-config-on-ext-app-controller-not-working/37733261#37733261
if(namespace && namespace.indexOf(".controller") > -1) {
namespace = namespace.slice(0, namespace.indexOf(".controller"));
}
return namespace;
}
}
Nếu bạn biết giải pháp tốt hơn, vui lòng cho tôi biết!
Bạn có yêu cầu các cửa hàng trong bộ điều khiển của mình không? Ví dụ này cho thấy cần thiết: [Ext.app.Controller # cfg-stores] (http://docs.sencha.com/extjs/6.0.2-classic/Ext.app.Controller.html#cfg-stores). –
cửa hàng: ['Menu'] nên là tất cả những gì bạn cần –