我尝试在Ext.Direct 4 MVC结构中使用ExtJS,但我无法添加提供程序。
我在调用Uncaught TypeError: Cannot call method 'addProvider' of undefined
时得到错误addProvider
Ext.Direct.addProvider(Ext.app.REMOTING_API);
我在应用程序的launch
和控制器的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: []
声明加载时,它还没有准备好。
是否有一种方法可以不像在Ext.application
中那样在Ext.onReady
中嵌套Ext.onReady
来实现这个功能?
没有嵌套会更好的MVC方式,如解释在这里的医生。
发布于 2013-10-15 05:45:59
应用程序定义中的require
不会做任何事情。它应该是复数requires
。
而且,您似乎已经在自己的答案中设计了这一点,但是Ext.direct.Manager
这个名字现在似乎是Sencha比Ext.Direct
更受欢迎的名字。
编辑
根据文档,可以使用字符串设置直接函数。显然,这是为了解决你遇到的问题。
这应该可以解决您的问题:
api: {
create: 'QueryDatabase.createRecord',
read: 'QueryDatabase.getResults',
update: 'QueryDatabase.updateRecords',
destroy: 'QueryDatabase.destroyRecord'
}
发布于 2013-10-15 01:27:36
可能您在调用提供程序之前缺少了API定义,请从Sencha的示例页面查看此定义
Ext.ns("Ext.app");Ext.app.REMOTING_API ={ "url":"php\/router.php","type":“TestAction”,"actions":{ "TestAction":[{“TestAction”:"doEcho","len":1 },{ "name":“乘”,"len":1 },{ "name":"getTree","len":1 },{ "name":"getGrid","len":1 },{ "name":"showDetails","params":"firstName","lastName","age“} };
它应该作为javascript文件包含在您的网页中。
<script type="text/javascript" src="api.php"></script>
有点像这个例子。
希望能帮上忙。
发布于 2013-10-15 09:11:24
在应用程序构造函数运行之前最好先添加直接提供程序:
Ext.define('Foo.Application', {
extend: 'Ext.app.Application',
requires: [
'Ext.direct.Manager',
'Ext.direct.RemotingProvider'
],
name: 'Foo',
constructor: function() {
Ext.direct.Manager.addProvider(...);
this.callParent(arguments);
}
});
Ext.application('Foo.Application');
https://stackoverflow.com/questions/19376978
复制相似问题