0

我正在尝试使用本地存储来获得“有很多”关联。我设置了两个模型:用户和产品。我的用户有很多产品。我想要:

在用户获得授权后,通过 AJAX 从服务器加载我的用户。产品已经存储在本地存储中(例如 {"id":"ext-record-1","user_id":1,"name":"product1"})。

// The id and name are loaded via ajax
var user = Ext.create('User', {id: 1, name: 'Ed'});
var userProducts = user.products();
userProducts.load();

问题是:如果我调用关联,则会加载存储/代理中的所有实例。根据文档,应该只有带有“user_id”的实例:1

过滤器已设置。只有当我从本地存储加载产品时才会发生这种情况,如果我在适当的位置创建它们就没有问题。保存到本地存储会破坏关联。

我在这里设置了一个没有本地存储的示例: http ://www.senchafiddle.com/#J9VX6

并使用本地存储:http ://www.senchafiddle.com/#J9VX6#hBDkq

请参阅http://docs.sencha.com/touch/2-0/#!/api/Ext.data.association.HasMany

我真的很感谢你的帮助

4

2 回答 2

1

似乎这是一个已知的错误,我在 sencha touch 论坛中获得了我的问题的链接:

http://www.sencha.com/forum/showthread.php?173327-WebStorage-proxy-can-t-deal-with-associated-data

我想这要等到下个版本的 Sencha Touch 才能解决

于 2012-10-31T08:21:17.690 回答
0

理查德·钱伯斯是对的;不一定要在 userProducts 上调用 load()。

此外。确保 User 模型上的 idProperty 设置为“id”(这是默认设置),并且 hasMany 关联上的 foreignKey 设置为“user_id”。

如果这不能提供解决方案,您可能想尝试在 UserProducts 上使用过滤器:

var userProducts = user.products().filter("user_id", user.id);
于 2012-10-31T01:39:02.773 回答