【问题标题】:ExtJS Ajax vs Extjs Store for single row from serverExtJS Ajax vs Extjs Store 用于来自服务器的单行
【发布时间】:2012-08-03 15:21:07
【问题描述】:

场景:我有一个返回当前登录用户详细信息的 URL。即

  • 一个记录
  • 不需要列表

我的选择:

  1. 每次手动执行ExtJS Ajax call,必须在需要回调等的任何地方插入代码。
  2. 创建一个ExtJS Store一次,每次都从存储实例中获取第一条记录。

问题:还有更好的选择吗?我正在使用 ExtJS 4.1。

【问题讨论】:

  • 也许我没有直接回答你的问题,但我不会推荐任何一种方式 - 我有一个类似的系统,我需要知道用户的类型,但我需要在某些时候知道它控制器是动态加载的(在应用程序启动之前)。我认为最好的方法是在你的 index.php 中包含一个 php 文件,该文件输出一个带有包含用户信息的全局变量的 javascript(看看直接 - 它做了类似的事情)。

标签: extjs extjs4.1 extjs-mvc


【解决方案1】:

您无需深入了解底层细节即可执行此类操作;使用标准工具。定义一个模型,为它分配一个您需要的类型的代理,然后加载它。查看文档:http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Model

【讨论】:

  • 这是正确答案。在启动时加载用户一次,如果需要,按需加载
  • @AlexanderTokarev 不是每个load都调用一个HTTP请求吗? (Ajax 或 REST,取决于代理的设置方式)
  • @Josvic Zammit 不一定。您可以使用 Ext.Direct 远程处理而不是普通的 Ajax 或 REST,它支持请求批处理。
【解决方案2】:

你为什么每次都做一个 ajax 调用?

执行一次,然后将其分配为全局变量?

Ext.Ajax.request({
    url: 'page.php',
    params: {
        id: 1
    },
    success: function(response){
        var text = response.responseText;
        window.user = Ext.JSON.decode(text);
        my.custom.launchFunction();//does your viewport etc for you
    }
});    

完成此操作后,您现在可以在任何地方进行 console.log(user.Name);

它比查找商店更简洁、更快捷。

作为奖励,您的用户对象可能比商店在没有大量配置的情况下处理的复杂得多。

【讨论】:

  • 是的,这就是我到目前为止到达的地方。这个调用(检索username)可以放在utils 文件中吗?这在 ExtJS MVC 架构中适合什么?
  • 我个人所做的是让loading 的css 实现处于活动状态,然后将其放入我的Ext.launch 函数中(例如,在它返回一个值之前我不会触发我的视口创建函数)我避免像瘟疫一样的 JS mvc,所以我的建议在这里可能不正确。
  • 是的,但你的意思是每次你需要访问当前页面中的用户对象时,你都在调用 ajax 调用,如果这是错误的,我的回答没有真正的用处。
  • 你的回答有一个用处:它确认在这个阶段没有什么可做的。 +1ed
  • 我仍然对你如何实例化一个商店 - 一次 - 并执行一个 ajax 调用 - 每次 - 感到困惑。如果您需要一个活动的(更新的)用户对象,或者如果您需要根据请求事件的用户快照,则每次都调用 ajax 是没有真正意义的。
猜你喜欢
  • 1970-01-01
  • 2013-12-30
  • 2014-02-09
  • 2011-07-04
  • 1970-01-01
  • 2010-12-10
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多