Advertisement
Serafim

Untitled

Aug 13th, 2013
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. namespace 'ArJs', ->
  2.   class @Model
  3.     private: {}
  4.  
  5.     primaryKey: 'id'
  6.    
  7.     constructor: (data) ->
  8.       $.extend @, ko.mapping.fromJS data
  9.       @[@primaryKey].subscribe (newval) =>
  10.         print "JSC Fatal Error: Primary key \"#{@primaryKey}\" (#{data.id} => #{newval}) " +
  11.           "for model \"#{@model.name}\" has been changed. Это влечёт к полному фейлу индексации данных.", "#900"
  12.  
  13.     @setup: (data) ->
  14.       if !@::private[@::model.name]?
  15.         @::private[@::model.name] = {
  16.           properties: {}
  17.           index: []
  18.         }
  19.       for i in data
  20.         @::private[@::model.name].properties[i[@::primaryKey]] = new Models[@::model.name](i)
  21.         @::private[@::model.name].index.push i.id
  22.  
  23.  
  24.     @find: (pk) ->
  25.       if pk is 'all' then   return @all()
  26.       if pk is 'first' then return @first()
  27.       if pk is 'last' then  return @last()
  28.  
  29.       return @::private[@::model.name].properties[pk]
  30.  
  31.     @all: ->
  32.       return @::private[@::model.name].properties
  33.  
  34.     @first: ->
  35.       for i of @::private[@::model.name].properties
  36.         return @::private[@::model.name].properties[i]
  37.  
  38.     @last: ->
  39.       for i of @::private[@::model.name].index.reverse()
  40.         return @::private[@::model.name].properties[@::private[@::model.name].index[i]]
  41.  
  42.     @join: (index, value, data) ->
  43.       for i of @::private[@::model.name].properties
  44.         obj = @::private[@::model.name].properties[i]
  45.         if data[obj[index]()]?
  46.           obj[value] = ko.mapping.fromJS data[i]
  47.         else
  48.           obj[value] = ko.mapping.fromJS 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement