2012-10-20 180 views
0

我试图让一个“有很多”协会使用本地存储工作。我设置了两个模型:用户和产品。我的用户有很多产品。我想:sencha触摸协会

用户通过授权后通过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

已设置过滤器。它只发生在我从本地存储中加载产品时,如果我在位置创建它们就没有问题。保存到本地存储会打破该关联。

我就定了一个例子没有localStorage的位置: http://www.senchafiddle.com/#J9VX6

并与localStorage的:http://www.senchafiddle.com/#J9VX6#hBDkq

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

我真的很感谢你的帮助

+0

将是很好或解释为什么添加它们 – pfried

+1

该文档似乎表示您不需要使用源代码行“userProducts.load();”因为当你使用“var userProducts = user.products();”它会根据您指定的过滤器自动加载。 –

+0

谢谢,但我认为这不是问题。问题是使用与webstorage的关联。有关更多详细信息,请参阅我答案中的链接。 – pfried

回答

0

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

此外。确保用户模型上的idProperty设置为'id'(这是默认值),hasMany关联中的foreignKey设置为'user_id'。

如果不提供解决方案,您可能需要使用的UserProducts过滤器尝试:

var userProducts = user.products().filter("user_id", user.id); 
+0

我提供了一个答案,因为这似乎是webstorage和关联的已知问题。负载的东西不是问题。我已经在使用自定义过滤器来解决问题。谢谢 – pfried