Let's say you are building a Twitter clone with Backbone.js. You have a collection of tweets. Each tweet is obviously an instance of the Tweet model.
You create an instance of the collection, fetch the latest 10 tweets, render them and add to the DOM.
So far so good.
What if you wanted to make a call to the server a few minutes later to see if any new tweets arrived? How can you add the newly arrived tweets to the collection?
If you use the fetch()
method, you are hitting the same URL all the time. That's fine. Is there a clever way that I can use Backbone/Underscore to filter those and add the tweets that aren't in the collection to the collection?
Collections are ordered sets of Models. We just need to extend the backbone's collection class to create our own collection. Any event that is triggered on a model in a collection will also be triggered on the collection directly.
The developers should make use of Backbone JS while developing a single-page Java application. Backbone JS features Model View Framework, which allows much more than structuring JavaScript architecture. It will help the developers eliminate several issues that they might be facing while developing apps.
There is only method named "start" can be used to manipulate the Backbone. js history.
BackboneJS is a lightweight JavaScript library that allows to develop and structure the client side applications that run in a web browser. It offers MVC framework which abstracts data into models, DOM into views and bind these two using events.
Lets assume that every one of your tweets has a unique identifier(if not, you should probably create one).
You can structure your backend in such away that by default it gets you 10 latest tweets if you call http://your.site.com/tweets without any arguments.
If you however call http://your.site.com/tweets?last_tweet_id=BLAblaBlA, it will give you 10 latest tweets that came after the last_tweet_id that you specified.
You can override the code that gets the data from the backend into your Collection by implementing YourCollection.sync method.
Reason: Backbone.Collection first tries to call Collection.sync and if its not implemented, it calls Backbone.sync function, so if you implement YourCollection.sync, it will be used. Here is the snippet from Backbone.Collection.fetch function:
(this.sync || Backbone.sync)('read', this, success, error);
so your sync would be something like
var TweetCollection = Backbone.Collection.extend({
model: TweetModel,
sync: function(method, collection, success, error) {
var requestData={};
if(collection.length>0) {
requestData.last_tweet_id=collection.last.id
}
var params = {
url: "/tweet",
type: "POST",
data: requestData,
success: success,
error: error
};
$.ajax(params);
}
}
You would have to override your collections parse function to make sure that the response is appended to the existing array of models.
I'm not sure if this was possible back in March as I only recently started using backbone. But a better solution may be to pass standard jQuery options into Collection.fetch.
this.collection.fetch({data: {last_tweet: last_teet_id}});
Check out the jQuery documentation for a full list of parameters.
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