Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Extjs Sencha Touch商店背景同步_Extjs_Store_Sencha Touch 2.3 - Fatal编程技术网

Extjs Sencha Touch商店背景同步

Extjs Sencha Touch商店背景同步,extjs,store,sencha-touch-2.3,Extjs,Store,Sencha Touch 2.3,我有一个绑定到商店的列表。我有一个输入文本字段(想想像UX一样的聊天),当用户单击按钮时,我会: var newMessageData = { text: textMessage }; var message = Ext.create('MyApp.model.Message', newMessageData); messagesStore.add(message); // At this point, the message shows up in my list message.sa

我有一个绑定到商店的列表。我有一个输入文本字段(想想像UX一样的聊天),当用户单击按钮时,我会:

var newMessageData = {
    text: textMessage
};
var message = Ext.create('MyApp.model.Message', newMessageData);
messagesStore.add(message); // At this point, the message shows up in my list
message.save(); // On a successful save, an identical message shows up again in this same list
我如何实现这一点,使消息一开始只显示一次(在用户键入内容之后立即显示),然后记录本身在后台与服务器同步

非常感谢您的帮助!谢谢

编辑: 我的模型定义非常简单,包含简单字段和几个转换字段+自定义idProperty:

idProperty: 'objectId',
{
    name: 'objectId',
    persist: false
}

您应该能够使用messagesStore.sync(),它:

将存储与其代理同步。这要求代理进行批处理 将存储区中的所有新记录、更新记录和删除记录放在一起,进行更新 每次操作时存储区对记录的内部表示 完成


好吧,我缺少的是,我必须将“primaryKey”键添加到我的hasMany和belongsTo关系中。在我的例子中,我有idProperty:“myCustomId”,但仅此一项对关联模型不起作用。我不得不在我的hasMany和belongsTo关系中添加primaryKey:“myCustomId”。

是的,我也尝试过。当我执行messagesStore.add()时,列表会随着添加的记录而更新。当我执行sync()时,它会添加另一个。想法?如果有帮助的话,messagesStore是一个关联的存储–因此基本上,someRecord.messages()存储在同步后包含两条记录()还是视图不同步?存储在同步后实际上有两条记录–这两条记录都是非脏的。我们来看看为什么存储的同步方法没有做我们认为应该做的事情,还是我们应该写一些代码来解决这个问题?