Краткий справочник

Шпаргалка по Spine.js

Краткое руководство по Spine.js: MVC-библиотека для JavaScript, включающая модели, методы классов и экземпляров, события и интеграцию Ajax.

· Опубликовано

Модели (Models)

Определение модели

class User extends Spine.Model
  @configure "User", "name", "address"

  fullName: ->
    [@first, @last].join ' '
// Наследование в чистом JavaScript
var User = Spine.Model.sub();
User.configure("User", "name", "address");

Методы класса модели

.configure 'modelname', attributes...

# Inheritance
.include(Module)
.extend(Module)

.create(name: "John")
.count()

# Events
.on 'refresh change', (user) -> ...
.trigger 'event'
.change (user) -> ...  # alias for on('change')
.fetch (user) -> ...   # alias for on('fetch')

# Serialization
.toJSON()         # all records
.fromJSON(json)   # from JSON string
.fromForm(el)

# Data properties
.records     # Hash of instances
.attributes  # array of attributes (from .configure)

# Lookups
.exists(1)
.find(1)     # throws error if not found
.select (u) -> u.name == 'bob'
.findByAttribute 'name', 'bob'
.findAllByAttribute 'name', 'bob'

.all()
.slice(6, 13)

# Deletion
.deleteAll()
.destroyAll()
.destroy(2)

Методы экземпляра

user = new User()

user.isNew()
user.exists()

# Validation
user.isValid()
user.validate = -> "Name required" unless @name

user.attributes()  # hash of attribute values
user.eql(other)    # equality check

# Updates
user.load(attrs)
user.reload()
user.fromForm(form)
user.updateAttribute("name", "john")
user.updateAttributes(name: "John")

# Persistence & Clones
user.save()
user.destroy()
user.dup()         # clone unsaved record

Интеграция с Ajax

Конфигурация Ajax

class User extends Spine.Model
  @extend Spine.Model.Ajax

  @url: '/users'
  scope: '2013'

Использование

User.fetch()
user = new User()

user.url()            #=> "/users"
user.url('bands')     #=> "/users/bands"
user.scope = 'admin'
user.url()            #=> "/admin/users"

Ajax REST-маппинг

Action HTTP Verb Endpoint
read GET /collection
create POST /collection (201 Created)
update PUT /collection/:id
destroy DELETE /collection/:id

Связи (Associations)

class Photo extends Spine.Model
  @belongsTo 'album', 'Album'

class Album extends Spine.Model
  @hasMany 'photos', 'Photo'

album.photos().all()
album.photos().create(name: "Vacation")

Ссылки и документация

Связанные темы