Skip to content
mike edited this page Apr 26, 2020 · 5 revisions

Models represent your data from a server or from a client.

All your models should be inherited from Sirius.BaseModel class.

Sirius.BaseModel contains a set of useful properties and methods for comfortable work with data.

attrs - model properties, for every property Sirius will be generated setter and getter.

class Post extends Sirius.BaseModel
  @attrs: ['id', {'title': 'my-default-title'}]

# create 
post = new Post({id: 'my-id'})

# getters
post.id()    # => 'my-id'
post.title() # => 'my-default-title'

# setters
post.title("another title")

post.title() # => another title

skip - ignore extra keys, when creating a model, by default is false. That is useful for serialization. When your the model does not match with backend response object (more fields for example)

class MyModel extends Sirius.BaseModel
  @attrs: ['id']

class MyModel1 extends Sirius.BaseModel
  @attrs: ['id']
  @skip: true 

obj = {'id': 1, 'foo': "bar"}

new MyModel(obj)   # => error
new MyModel1(obj)  # => ok
 

guid_for - generate guid for an attribute

class Post extends Sirius.BaseModel
  @attrs: ['id']
  @guid_for: 'id' # or ['id']

post = new Post()
post.id() # => 75b659d2-a40d-dd41-9335-81473e1c5a8d

validate - define validators for attributes in a model

class Post extends Sirius.BaseModel
  @attrs: ["id", "title", "description"]
  @validate :
    id:
      presence: true,
      numericality: only_integers: true
      inclusion: within: [1..10]
    
    title:
      exclusion: within: ["Title"]

    description:
      custom: true
      validate_with: (desc) ->
        if desc == "foo"
          true
        else
          @msg = "Description must be foo"
          false

comp - define computed fields, computed fields are available in validate too.

class MyModel extends Sirius.BaseModel
  @attrs: ['first_name', 'last_name']
  @comp('full_name', 'first_name', 'last_name')
  @comp('nick', (first, last) -> "#{first.charAt(0)}.#{last}")
  @comp('sum', 'full_name', 'nick')

my_model = new MyMode()

my_model.full_name() # => null


my_model.first_name('john') 
my_model.full_name() # => null

my_model.last_name('doe')
my_model.full_name() # => john doe
my_model.nick() # => j.doe
my_model.sum()  # => john doe j.doe

methods

get_attributes - return an array of attributes for a model

reset - reset attributes to nulls

is_valid(attr = null) - check that model is valid for save or update or attribute in model is valid

save - return true if model is valid, otherwise return false

to_json - convert model to json representation

to_object - convert model to javascript object

@from_json - convert JSON to model

json = ...

Post.from_json(json) # => post model

compare - compare two models, you need to redefine this method in your model

class Post extends Sirius.BaseModel
  @attrs: ['id', 'title']
  compare: (other) -> 
    @id() == other.id()

clone - clone current model

set_error - set error to attribute validator

model.set_error("id.presence", "some error") 

get_error(attr = null) - get all errors, or exactly error for attribute

model.get_error("id") # ["some error"]

@register_validator - add new validator for models, see validators page

Clone this wiki locally