2012-10-20 175 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