I have a hierarchy of categories. I use a jquery library for the hierarchy to get all jumbled up the way the user wants. Then they click save. So the initial hierarchy and hierarchy to be saved could be totally different.
The hierarchy is represented as a collection and I use parentIds to build a tree using ol and li tags.
When the user clicks save, I then need to update all the items in the collection with their new parentId and sync each one with the server.
I'm wondering if anyone has any advice on how to proceed here. I've seen in the documentation for Backbone.sync, ''Use setTimeout
to batch rapid-fire updates into a single request.'' So, if I understand correctly, I would queue each of the calls to Backbone.sync and then use setTimeout to send my queue to the server after a few seconds?
Also, if I rewrite Backbone.sync, don't I still need a 'save' method somewhere for the collection that will parse the json of the response (the server response would have to send back a list of objects) and then call model.set on each item in the collection? Does any one have any example code?
Thanks!
Backbone is wonderful because it does a lot of work for you. To save our donut and secondHelping, we simply do this: myDonut. save(); mySecondHelping.
A Backbone. js Collections are a group of related models. It is useful when the model is loading to the server or saving to the server. Collections also provide a helper function for performing computation against a list of models.
Backbone. Backbone has been around for a long time, but it's still under steady and regular development. It's a good choice if you want a flexible JavaScript framework with a simple model for representing data and getting it into views.
I ended up putting an updateAll
method into my collection model. This worked like a dream:
Domain.PageList = Backbone.Collection.extend({
model: Domain.Page,
url: '_domainController/PageListController',
comparator: function(page) {
return page.get('ordering');
},
updateAll: function() {
var collection = this;
options = {
success: function(model, resp, xhr) {
collection.reset(model);
}
};
return Backbone.sync('update', this, options);
}
});
On the backend (I'm using PHP) I just get the data and save it to my database and return a new collection in JSON format.
I'm not sure I fully understand the context. It is something like this: you have one collection with all the categories, and keep the hierarchy using the property parentId
. The user changes the hierarchy and then you want to save the hierarchy (implicitly, save the collection that now contains different parentId
's).
If that is correct, what I would do is:
{id: parentId}
and updates the the all the categories with this data. Backbone.sync('update', categories_collection, {data: a_hash_of_{id:parent_id}, success: your_success_callback)
. This should work without any other overriding, if you specify url
for your categories, and in the success callback you can simply reset the collection with the new data.This is not full REST, but it has the advantage of firing only one update request no matter how many categories you have.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With