%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/npm-asset/at.js/src/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/vendor/npm-asset/at.js/src/model.coffee |
# Class to process data
class Model
constructor: (@context) ->
@at = @context.at
# NOTE: bind data storage to inputor maybe App class can handle it.
@storage = @context.$inputor
destroy: ->
@storage.data(@at, null)
saved: ->
this.fetch() > 0
# fetch data from storage by query.
# will invoke `callback` to return data
#
# @param query [String] catched string for searching
# @param callback [Function] for receiving data
query: (query, callback) ->
data = this.fetch()
searchKey = @context.getOpt("searchKey")
data = @context.callbacks('filter').call(@context, query, data, searchKey) || []
_remoteFilter = @context.callbacks('remoteFilter')
if data.length > 0 or (!_remoteFilter and data.length == 0)
callback data
else
_remoteFilter.call(@context, query, callback)
# get or set current data which would be shown on the list view.
#
# @param data [Array] set data
# @return [Array|undefined] current data that are showing on the list view.
fetch: ->
@storage.data(@at) || []
# save special flag's data to storage
#
# @param data [Array] data to save
save: (data) ->
@storage.data @at, @context.callbacks("beforeSave").call(@context, data || [])
# load data. It wouldn't load for a second time if it has been loaded.
#
# @param data [Array] data to load
load: (data) ->
this._load(data) unless this.saved() or not data
reload: (data) ->
this._load(data)
# load data from local or remote with callback
#
# @param data [Array|String] data to load.
_load: (data) ->
if typeof data is "string"
$.ajax(data, dataType: "json").done (data) => this.save(data)
else
this.save data