使用 ExtJS 4.1 REST 代理创建“批处理”请求
Posted
技术标签:
【中文标题】使用 ExtJS 4.1 REST 代理创建“批处理”请求【英文标题】:Create "batch" request using ExtJS 4.1 REST Proxy 【发布时间】:2012-11-16 23:03:17 【问题描述】:我有两个模型/代理/商店,我关心 Questions
和 Choices
。两者都以 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,您要寻找的是模型关联。一旦你创建了 Questions
和 Choices
Ext 模型并让服务器响应嵌套的 json 数据(所以 Questions
包含嵌入在请求中的子 Choices
)Ext 将创建 question
记录以及 question.choices()
子商店自动。
【讨论】:
以上是关于使用 ExtJS 4.1 REST 代理创建“批处理”请求的主要内容,如果未能解决你的问题,请参考以下文章