
ext.direct 是 ext js 框架提供的一种机制,用于在客户端 javascript 代码中无缝调用服务器端方法。它通过将服务器端方法映射到客户端 javascript 对象,简化了前后端通信,使得开发者可以像调用本地 javascript 函数一样调用远程服务。通常,ext.direct 会与 ext.data.store 结合使用,以自动加载数据。
在使用 Ext.Direct 时,一个常见的场景是,虽然通过 Ext.data.Store 配置 directFn 可以成功从服务器获取数据,但在 JavaScript 代码中尝试直接调用这些方法时(例如 RaStatuses.get_ra_statuses()),却会遇到 ReferenceError: RaStatuses is not defined 的错误。
例如,以下 Ext.data.Store 配置可以正常工作,并成功填充数据:
Ext.define('CSM.store.ra.Statuses', {
  extend: 'Ext.data.Store',
  model: 'CSM.model.ra.Status',
  proxy: {
    type: 'direct',
    directFn: "RaStatuses.get_ra_statuses" // 这里可以正常工作
  },
  autoLoad: true
});然而,当尝试在其他 JavaScript 函数中直接调用此方法时:
a = RaStatuses.get_ra_statuses(); // 导致 'ReferenceError: RaStatuses is not defined'
这表明尽管 Ext.Direct 代理能够识别并调用服务器方法,但该方法对应的客户端对象并未全局暴露或以可访问的方式注册。
ReferenceError 的出现通常是因为 Ext.Direct API 的配置不完整,导致其提供的远程方法未能被正确地注册到全局命名空间或可访问的对象中。为了解决这个问题,我们需要在服务器端生成 Ext.Direct API 配置时,确保以下几个关键点:
以下是经过修正的 api.php 返回内容,它解决了上述 ReferenceError 问题:
<?php
// api.php 返回内容示例
header('Content-Type: application/javascript');
?>
Ext.namespace('RPC'); // 1. 定义一个全局命名空间 'RPC'
var Ext = Ext || {};
RPC.REMOTING_API = {
    "url": "php/api/router.php",
    "type": "remoting",
    "namespace": "RPC", // 2. 指定此 API 配置的命名空间
    "descriptor": "RPC.REMOTING_API", // 3. 指定此 API 配置的描述符
    "actions": {
        "RaStatuses": [{
            "name": "get_ra_statuses",
            "len": 0 // 注意:这里 len 应与服务器端方法的参数数量匹配
        }]
    }
};
// 4. 将此 API 配置作为提供者添加到 Ext.direct.Manager
Ext.direct.Manager.addProvider(RPC.REMOTING_API);关键修改点解释:
经过上述配置后,之前无法直接调用的方法现在可以通过指定的命名空间进行访问:
// 现在,这个调用将成功返回数据 RPC.RaStatuses.get_ra_statuses();
通过 RPC. 前缀,我们明确地访问了在 RPC 命名空间下注册的 RaStatuses 对象及其方法 get_ra_statuses。
通过遵循这些步骤和最佳实践,开发者可以确保 Ext.Direct 服务端方法在客户端 JavaScript 中得到正确且方便的直接调用。
以上就是Ext.Direct 服务端方法在客户端直接调用的配置与实践的详细内容,更多请关注php中文网其它相关文章!
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号