首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何初始化Ext.Direct?

如何初始化Ext.Direct?
EN

Stack Overflow用户
提问于 2013-10-15 08:53:01
回答 4查看 5.5K关注 0票数 2

我尝试在Ext.Direct 4 MVC结构中使用ExtJS,但我无法添加提供程序。

我在调用Uncaught TypeError: Cannot call method 'addProvider' of undefined时得到错误addProvider

代码语言:javascript
运行
复制
Ext.Direct.addProvider(Ext.app.REMOTING_API);

我在应用程序的launch和控制器的init中都进行了尝试。

代码语言:javascript
运行
复制
Ext.define('Dir.Application', {
    require: [
        'Ext.direct.*',
        'Ext.data.*',
        'Ext.grid.*'
    ],
    launch: function(){
        Ext.Direct.addProvider(Ext.app.REMOTING_API);
    }
    ...
});

代码语言:javascript
运行
复制
Ext.define('Dir.controller.Main', {
    init: function(){
        Ext.Direct.addProvider(Ext.app.REMOTING_API);
    }
    ...
});

两人都犯了同样的错误。

addProvider放入代码的正确位置在哪里?

更新:应用@rixo的建议。

代码语言:javascript
运行
复制
Ext.define('Dir.Application', {
    view:['Grid'],
    requires: [
        'Ext.direct.*',
        'Ext.data.*',
        'Ext.grid.*'
    ],
    launch: function(){
        Ext.Direct.addProvider(Ext.app.REMOTING_API);
    }
    ...
});

我的观点是定义一个商店和一个代理:

代码语言:javascript
运行
复制
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方式,如解释在这里的医生

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-15 13:45:59

应用程序定义中的require不会做任何事情。它应该是复数requires

而且,您似乎已经在自己的答案中设计了这一点,但是Ext.direct.Manager这个名字现在似乎是Sencha比Ext.Direct更受欢迎的名字。

编辑

根据文档,可以使用字符串设置直接函数。显然,这是为了解决你遇到的问题。

这应该可以解决您的问题:

代码语言:javascript
运行
复制
api: {
    create: 'QueryDatabase.createRecord',
    read: 'QueryDatabase.getResults',
    update: 'QueryDatabase.updateRecords',
    destroy: 'QueryDatabase.destroyRecord'
}
票数 3
EN

Stack Overflow用户

发布于 2013-10-15 09: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文件包含在您的网页中。

代码语言:javascript
运行
复制
 <script type="text/javascript" src="api.php"></script>

有点像这个例子

希望能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2013-10-15 17:11:24

在应用程序构造函数运行之前最好先添加直接提供程序:

代码语言:javascript
运行
复制
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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19376978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档