我尝试将 Ext.Direct 与 ExtJS 4 MVC 结构一起使用,但无法添加提供程序。
我在调用 addProvider
时收到错误 Uncaught TypeError: Cannot call method 'addProvider' of undefined
:
Ext.Direct.addProvider(Ext.app.REMOTING_API);
我在应用程序的 launch
和 Controller 的 init
中都进行了尝试。
Ext.define('Dir.Application', {
require: [
'Ext.direct.*',
'Ext.data.*',
'Ext.grid.*'
],
launch: function(){
Ext.Direct.addProvider(Ext.app.REMOTING_API);
}
...
});
和
Ext.define('Dir.controller.Main', {
init: function(){
Ext.Direct.addProvider(Ext.app.REMOTING_API);
}
...
});
两者都给出相同的错误。
将 addProvider
放入代码中的正确位置在哪里?
更新:应用 @rixo 的建议。
Ext.define('Dir.Application', {
view:['Grid'],
requires: [
'Ext.direct.*',
'Ext.data.*',
'Ext.grid.*'
],
launch: function(){
Ext.Direct.addProvider(Ext.app.REMOTING_API);
}
...
});
我的观点是定义一个存储和一个代理:
Ext.define('Dir.view.Grid', {
extend: 'Ext.grid.Panel',
store: {
proxy: {
type: 'direct',
reader:{root: 'table'},
api: {
create: QueryDatabase.createRecord,
read: QueryDatabase.getResults,
update: QueryDatabase.updateRecords,
destroy: QueryDatabase.destroyRecord
}
}
...
}
现在第一个错误是好的,但我收到一个错误,提示 QueryDatabase
未定义。它是通过 Ext.Direct.addProvider(Ext.app.REMOTING_API);
处的提供程序定义的,但当通过 views: []
加载 View 时它尚未准备好应用程序定义中的声明。
有没有一种方法可以在不将 Ext.application
嵌套在 Ext.onReady
中的情况下正常工作,就像 my solution 中那样?
对于 MVC 方式来说,没有嵌套会更好,如解释的 here in the docs .
最佳答案
应用程序定义中的 require
不会执行任何操作。应该是复数requires
.
此外,您似乎在自己的答案中设计了这个,但是 Ext.direct.Manager
这个名称现在似乎比 Ext.Direct
更受 Sencha 的青睐.
编辑
根据docs ,您可以使用字符串设置直接函数。显然,这正是为了解决您遇到的问题。
这应该可以解决您的问题:
api: {
create: 'QueryDatabase.createRecord',
read: 'QueryDatabase.getResults',
update: 'QueryDatabase.updateRecords',
destroy: 'QueryDatabase.destroyRecord'
}
关于extjs - 如何初始化Ext.Direct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19376978/