Jestem nowy w stosunku do kręgosłupa, nie jestem pewien, jaki jest właściwy sposób używania HasMany.Relacje między-relacyjne i najlepsze praktyki
Mam model Parent
, który ma wiele children
(przez "wiele" mam na myśli tysiące dzieci). Aby uniknąć problemów z wydajnością, wysyłam zapytanie do dzieci przez ich klucz obcy: /child/?parent=1
, zamiast tworzyć ogromną listę child_ids
w Parent
. Ale wygląda na to, że to nie jest sposób na relokację.
Zastanawiam się, jaki jest właściwy sposób, aby sobie z tym poradzić.
1, Zmień mój json api do listy id dzieci w dominującej obejmują, następnie wysłać tysiące identyfikatorów jako Backbone-relacyjne polecamy:
url = function(models) {
return '/child/' + (models ? 'set/' + _.pluck(models, 'id').join(';') + '/' : '');
}
// this will end up with a really long url: /child/set/1;2;3;4;...;9998;9999
2, zastępują wiele metod w Backbone-relacyjny, to niech sobie ta sytuacja. Moja pierwsza myśl to:
relations: [{
collectionOptions: function(model){
// I am not sure if I should use `this` to access my relation object
var relation = this;
return {
model: relation.relatedModel,
url: function(){
return relation.relatedModel.urlRoot + '?' + relation.collectionKey + '=' + model.id;
}
}
}
}]
// This seems work, but it can not be inherent by other model
// And in this case parent will have am empty children list at beginning.
// So parent.fetchRelated() won't fetch anything, I need call this url my self.
3, Stosuj tylko relacje szkieletu jako sklep, a następnie użyj kolekcji do zarządzania relacjami.
4, niektóre inne magiczny sposób lub wzór lub szkieletowej ramy
Dzięki za pomoc.
Z mojego doświadczenia z kręgosłupem wynika, że nie będzie dobrze działać z tysiącami modeli. Wystąpiły pewne problemy z wydajnością w setkach modeli - szczególnie podczas ich ładowania. Relacje szkieletowo-relacyjne są dość "rozmowne" ze zdarzeniami wyzwalającymi, a w zależności od tego, ile właściwości masz w swoim modelu, kończy się to tuzinem zdarzeń wystrzeliwanych na model razy tysiące modeli. –
Jestem ciekawa, jak w końcu sobie z tym poradziłeś. –
to jest sposób w jaki ostatecznie używam, niezbyt czysty, ale działa do tej pory. – xzhang