似乎有几种方法可以使用ExtJS功能与MVC存储交互并保存数据(将数据发送到服务器端堆栈)。我发现Sencha支持几种标准方法(从我目前所读到的内容来看),但我正在努力为我的应用程序的不同部分选择最好的方法。我使用Ext Direct作为服务器端堆栈,但我不确定这是否有什么不同。我意识到,有些方法将数据作为"脏"添加到存储中,有些方法则将数据发送到服务器。如果我犯了错误,请更正下面的任何描述如果你至少能让我朝着正确的方向前进(对于我的3个用例),这样我就不会在需要升级到ExtJS 5.x时浪费很多时间来修复自定义代码,那将是非常感谢的
{form}.submit()
-这会向服务器发送JSON请求,通常用于具有单一数据级别的表单(意味着没有嵌套的数据结构){store}.save()
-似乎将数据保存到服务器{store}.sync()
-似乎向给定存储的服务器发送脏记录{store}.autoSync
-用于自动调用{store}.sync()
的配置{record}.updateRecord()
-向服务器发送更新的记录{store}.commit({record})
-似乎在更新存储中的记录,而实际上没有向服务器发送任何内容{store}.add()
-似乎只用于向存储添加脏记录,而不实际向服务器发送任何内容{model}.save()
-似乎以与{store}.save()
类似的方式保存数据,但似乎在使用模型关联来构建MVC模型之间的引用完整性时使用- 使用标准
{proxy}.writer
- 扩展
{proxy}.writer
- 覆盖
{proxy}.write()
事件侦听器
我是否遗漏了任何内容(除了Sencha支持的各种代理)
请求:
(1)我希望能够将记录保存在具有深度为1的字段的表单中(意味着没有嵌套的数据结构)。因此,表单包含我的实体,具有属性和值。
(2)我希望能够将记录保存在具有嵌套组件(表单)的组件(窗体)中。每个组件都可以具有属性/值对以及网格。
(3)我希望能够保存对树组件存储数据的更改。我了解模型关联(用于阅读)。在脏树中保存数据的最佳方法是什么?将整个树发送到服务器似乎需要做很多工作,因为在读取过程中,我一次只检索一个级别以添加到我的存储中。
这很巧妙,但在我了解基本知识之前,我不想变得太复杂。http://moduscreate.com/expert-ext-js-model-integration-in-forms/
早些时候,我曾在不同的商店工作,每个商店都有CRUD。但这种复杂的数据同步操作是因为它将同步过程分为单独的操作,所以您无法同时将数据与嵌套项同步。
我认为代理人的作者是提供你所说内容的最佳方式。通过自定义它,您可以发送简单的数据或一些复杂的结构。在我的实践中,我使用这样的方法。下面是作者使用子数据的示例。
writer: {
type: "json",
getRecordData: function (record, operation) {
var data = record.getData();
var s = [];
record.subdivisions().each(function(subdivision) {
var d = subdivision.getData();
d.organizationId = data.id;
s.push(d);
});
data.subdivisions = s;
return data;
}
},
您可以通过extAjax发送请求。假设你有成功的响应,你可以通知用户你所做的更改,如果需要,你只需在成功后重新加载你的商店。我认为这可能会对某人有所帮助。