使用 ExtJS 4.1 REST 代理创建“批处理”请求

Posted

技术标签:

【中文标题】使用 ExtJS 4.1 REST 代理创建“批处理”请求【英文标题】:Create "batch" request using ExtJS 4.1 REST Proxy 【发布时间】:2012-11-16 23:03:17 【问题描述】:

我有两个模型/代理/商店,我关心 QuestionsChoices。两者都以 JSON 格式从 REST 服务器获取数据。我目前的流程是这样的:

            // load numQuestions records from store.Questions
    var qs = Ext.getStore('Question');
            //... loadmask, etc.
    qs.load(
        scope : this,
        params : 
            limit : numQuestions
        ,
        callback : function() 
            this.createQuestionCards(numQuestions);
        
    );

获得Questions 后,我会循环并获取与每个Question 相关的Choices,例如:

    for ( i = 0; i < numQuestions; i++) 
                // ... misc ...
        Assessor.questionChoices[i] = qs.getAt(i).choices();
                // ...misc...
        ,

这很好用,除了它为每个循环迭代生成一个 XMLHTTPRequest。最小响应时间在 0.15 秒区域内,这对于 N

如何让 ExtJS “批处理”请求并在循环体之后发送它们?例如:

var choiceBatch = qs.createBatch();
for ( i = 0; i < numQuestions; i++) 
    // ... misc ...
    Assessor.questionChoices[i] = choiceBatch.getAt(i).choices();
    // ...misc...
;
choiceBatch.execute();

【问题讨论】:

***.com/questions/4386701/… 似乎表明这不起作用,但答案已经快两年了。 【参考方案1】:

Ext.data.proxy.Rest 有一个配置选项batchActions,因为它是basically an AjaxProxy,它有不同的方法,它可能会以与 AjaxProxy 相同的方式工作。

【讨论】:

我看到了batchActions 参数。您能否解释一下如何实际设置批处理请求。没有明显的方法可以像var myBatch = myProxy.createBatch(); myBatch.getByID('adsf'); .... myBatch.execute(); @justinzane 尝试查看batch() 方法和batchOrder 属性【参考方案2】:

由于我没有得到关于带有多部分的宁静批处理的明确答案......

我自己在Ext.data.proxy.Rest v4.2.1 中使用batchActions=true 进行测试,结果批处理仅在同一存储和HTTP 方法中。 (batchActions REST 默认为 false)

这意味着如果有 200 个 post 和 1 个 delete 并且您调用 store.sync(),它将批处理为 2 个请求,POST 请求正文将用记录数组而不是单个记录包装。

我正在寻找它是否可以通过使用 multipart/mixed 批量处理所有包含所有 GET、POST、PUT 和 DELETE 的商店,但结果是否定的。 (查看OData Batch Processing)

关于 OP,您要寻找的是模型关联。一旦你创建了 QuestionsChoices Ext 模型并让服务器响应嵌套的 json 数据(所以 Questions 包含嵌入在请求中的子 Choices)Ext 将创建 question 记录以及 question.choices()子商店自动。

【讨论】:

以上是关于使用 ExtJS 4.1 REST 代理创建“批处理”请求的主要内容,如果未能解决你的问题,请参考以下文章

ExtJs 4:如何在一个请求中发送所有修改、新和删除的记录?

ExtJS 4.1 如何动态创建带有网格的窗口

创建自定义布局 ExtJs 4.1

如何在 extjs 4.1 中使用包含图像的组合

ExtJS 4.1:如何在组合框中设置预选项目?

从 Sencha ExtJS 4.0 迁移到 ExtJS 4.1