/app/reviews.js
https://github.com/harthur/bzhome · JavaScript · 162 lines · 132 code · 28 blank · 2 comment · 5 complexity · 62436f197af7777aaffc8785d2532d34 MD5 · raw file
- $(function() {
- window.Review = Backbone.Model.extend({
- attachment: null,
- bug: null,
- time: ''
- });
- window.Reviews = Backbone.Collection.extend({
- model: Review,
- localStorage: new Store("bzhome-reviews"),
-
- initialize: function() {
- this.bind("reset", this.resetStore, this);
- },
-
- resetStore: function() {
- Backbone.sync("clear", this);
- Backbone.sync("create", this);
- }
- });
-
- window.Feedbacks = Reviews.extend({
- localStorage: new Store("bzhome-feedbacks")
- });
- window.SuperReviews = Reviews.extend({
- localStorage: new Store("bzhome-superreviews")
- });
- window.NeedInfos = Reviews.extend({
- localStorage: new Store("bzhome-needinfo")
- });
-
- window.reviews = new Reviews;
- window.feedbacks = new Feedbacks;
- window.superReviews = new SuperReviews;
- window.needInfos = new NeedInfos;
-
- window.ReviewRow = Backbone.View.extend({
- tagName: "div",
- className: "review-item",
- template: Handlebars.compile($("#review-item").html()),
-
- render: function() {
- $(this.el).html(this.template(this.model.toJSON()));
- return this;
- }
- });
- window.NeedInfoRow = Backbone.View.extend({
- tagName: "div",
- className: "needinfo-item",
- template: Handlebars.compile($("#needinfo-item").html()),
- render: function() {
- $(this.el).html(this.template(this.model.toJSON()));
- return this;
- }
- });
- window.ReviewList = Backbone.View.extend({
- el: $("#reviews"),
- list: $("#reviews-list"),
- type: "reviews",
- initialize: function() {
- var collection;
- switch (this.type) {
- case "feedback":
- collection = this.collection = feedbacks;
- break;
- case "reviews":
- collection = this.collection = reviews;
- break;
- case "superreview":
- collection = this.collection = superReviews;
- break;
- case "needinfo":
- collection = this.collection = needInfos;
- break;
- default:
- console.error("unknown type '" + this.type + "'!");
- }
- collection.bind("add", this.addReview, this);
- collection.bind("reset", this.render, this);
- // get cached list from localStorage
- collection.fetch();
- // but fetch from the server and update
- var type = this.type;
- bzhome.user.requests(function(err, requests) {
- var items;
- switch (type) {
- case "feedback":
- items = requests.feedbacks;
- break;
- case "reviews":
- items = requests.reviews;
- break;
- case "superreview":
- items = requests.superReviews;
- break;
- case "needinfo":
- items = requests.needInfos;
- console.log(requests);
- break;
- default:
- console.error("unknown type '" + type + "'!");
- }
- collection.reset(items);
- });
- },
- render: function(reviews) {
- this.list.empty();
- this.collection.each(_(this.addReview).bind(this));
- this.el.find(".count").html(this.collection.length);
- $(".timeago").timeago();
- },
- addReview: function(review) {
- var view;
- if (this.type == 'needinfo') {
- view = new NeedInfoRow({
- model: review
- });
- } else {
- view = new ReviewRow({
- model: review
- });
- }
- this.list.append(view.render().el);
- }
- });
-
- window.FeedbackList = ReviewList.extend({
- el: $("#feedbacks"),
- list: $("#feedbacks-list"),
- type: "feedback"
- });
- window.SuperReviewList = ReviewList.extend({
- el: $("#superreviews"),
- list: $("#superreviews-list"),
- type: "superreview"
- });
- window.NeedInfoList = ReviewList.extend({
- el: $("#needinfo"),
- list: $("#needinfo-list"),
- type: "needinfo"
- });
- });