Γρήγορη αναφορά

Backbone.js Cheat Sheet

Ένας συστηματικός οδηγός για το framework Backbone.js, που περιλαμβάνει μεθόδους για βασικές έννοιες όπως μοντέλα, προβολές και δρομολογητές, βοηθώντας τους προγραμματιστές να κατακτήσουν γρήγορα αυτό το κλασικό frontend MVC framework.

Δημοσιεύτηκε

Σύνδεση Συμβάντων (Binding Events)

.on('event', callback)
.on('event', callback, context)
.on({
  'event1': callback,
  'event2': callback
})
.on('all', callback)
.once('event', callback)   // Προσθήκη ενός προσαρμοσμένου συμβάντος που εκτελείται μόνο μία φορά

Αποσύνδεση Συμβάντων (Unbinding Events)

object.off('change', onChange)    // μόνο το callback `onChange`
object.off('change')              // όλα τα 'change' callbacks
object.off(null, onChange)        // callback `onChange` για όλα τα συμβάντα
object.off(null, null, context)   // όλα τα callbacks για το `context` σε όλα τα συμβάντα
object.off()                      // όλα

Ενεργοποίηση Συμβάντων (Trigger Events)

object.trigger('event')
view.listenTo(object, event, callback)
view.stopListening()

Λίστα Ενσωματωμένων Συμβάντων (Built-in Events)

  • Collection:

    • add (model, collection, options)
    • remove (model, collection, options)
    • reset (collection, options)
    • sort (collection, options)
  • Model:

    • change (model, options)
    • change:[attr] (model, value, options)
    • destroy (model, collection, options)
    • error (model, xhr, options)
  • Model and collection:

    • request (model, xhr, options)
    • sync (model, resp, options)
  • Router:

    • route:[name] (params)
    • route (router, route, params)

Προβολές (Views)

Ορισμός Προβολών

// Όλα τα χαρακτηριστικά είναι προαιρετικά
var View = Backbone.View.extend({
  model: doc,
  tagName: 'div',
  className: 'document-item',
  id: "document-" + doc.id,
  attributes: { href: '#' },
  el: 'body',
  events: {
    'click button.save': 'save',
    'click .cancel': function() { ··· },
    'click': 'onclick'
  },
  constructor: function() { ··· },
  render: function() { ··· }
})

Δημιουργία Αντικειμένου Προβολής (View Instantiation)

view = new View()
view = new View({ el: ··· })

Μέθοδοι Προβολής (View Methods)

view.$el.show()
view.$('input')
view.remove()
view.delegateEvents()
view.undelegateEvents()

Μοντέλα (Models)

Ορισμός Μοντέλων

// Όλα τα χαρακτηριστικά είναι προαιρετικά
var Model = Backbone.Model.extend({
  defaults: {
    'author': 'unknown'
  },
  idAttribute: '_id',
  parse: function() { ··· }
})

Δημιουργία Αντικειμένου Μοντέλου (Model Instantiation)

var obj = new Model({ title: 'Lolita', author: 'Nabokov' })
var obj = new Model({ collection: ··· })

Μέθοδοι Μοντέλου (Model Methods)

obj.id
obj.cid   // → 'c38' (client- side ID)
obj.clone()
obj.hasChanged('title')
obj.changedAttributes()  // false ή hash
obj.previousAttributes() // false ή hash
obj.previous('title')
obj.isNew()
obj.set({ title: 'A Study in Pink' })
obj.set({ title: 'A Study in Pink' }, { validate: true, silent: true })
obj.unset('title')
obj.get('title')
obj.has('title')
obj.escape('title')     /* Όπως το .get() αλλά με HTML-escaped */
obj.clear()
obj.clear({ silent: true })
obj.save()
obj.save({ attributes })
obj.save(null, {
  silent: true, patch: true, wait: true,
  success: callback, error: callback
})
obj.destroy()
obj.destroy({
  wait: true,
  success: callback, error: callback
})
obj.toJSON()
obj.fetch()
obj.fetch({ success: callback, error: callback })

Επικύρωση (Validation)

var Model = Backbone.Model.extend({
  validate: function(attrs, options) {
    if (attrs.end < attrs.start) {
      return "Can't end before it starts"
    }
  }
})

{: data-line="2"}

obj.validationError  //=> "Can't end before it starts"
obj.isValid()
obj.on('invalid', function (model, error) { ··· })
// Ενεργοποιείται σε:
obj.save()
obj.set({ ··· }, { validate: true })

Προσαρμοσμένα URLs (Custom URLs)

var Model = Backbone.Model.extend({
  // Ενιαίο URL (string ή συνάρτηση)
  url: '/account',
  url: function() { return '/account' },
  // Και οι δύο αυτοί τρόποι λειτουργούν με τον ίδιο τρόπο
  url: function() { return '/books/' + this.id }),
  urlRoot: '/books'
})
var obj = new Model({ url: ··· })
var obj = new Model({ urlRoot: ··· })

Σχετικά θέματα