Improved logging, remover App.Model.retrieve(). Fetch also items with same updated_at timestamp.

This commit is contained in:
Martin Edenhofer 2015-10-03 09:24:44 +02:00
parent c49ce33cae
commit 3aea8321b4
4 changed files with 22 additions and 59 deletions

View file

@ -497,7 +497,7 @@ class App.Controller extends Spine.Controller
item.object_name = object.objectDisplayName() item.object_name = object.objectDisplayName()
item.cssIcon = object.iconActivity( @Session.get() ) item.cssIcon = object.iconActivity( @Session.get() )
item.created_by = App.User.retrieve( item.created_by_id ) item.created_by = App.User.find( item.created_by_id )
items items
ws_send: (data) -> ws_send: (data) ->

View file

@ -64,7 +64,7 @@ class ArticleViewItem extends App.Controller
#@highligher.loadHighlights(@ticket_article_id) #@highligher.loadHighlights(@ticket_article_id)
d = => d = =>
@highligher.loadHighlights(@ticket_article_id) @highligher.loadHighlights(@ticket_article_id)
@delay(d, 800) @delay(d, 200)
hasChanged: (article) => hasChanged: (article) =>

View file

@ -2,9 +2,9 @@ class App.TicketZoomMeta extends App.Controller
constructor: -> constructor: ->
super super
@ticket = App.Ticket.fullLocal( @ticket.id ) @ticket = App.Ticket.fullLocal(@ticket.id)
@subscribeId = @ticket.subscribe(@render)
@render(@ticket) @render(@ticket)
@subscribeId = @ticket.subscribe(@render)
render: (ticket) => render: (ticket) =>
@html App.view('ticket_zoom/meta')( @html App.view('ticket_zoom/meta')(
@ -13,4 +13,4 @@ class App.TicketZoomMeta extends App.Controller
) )
release: => release: =>
App.Ticket.unsubscribe( @subscribeId ) App.Ticket.unsubscribe(@subscribeId)

View file

@ -161,7 +161,7 @@ class App.Model extends Spine.Model
# return error object # return error object
if !_.isEmpty(errors) if !_.isEmpty(errors)
console.log 'error', 'validation failed', errors App.Log.error('Model', 'validation failed', errors)
return errors return errors
# return no errors # return no errors
@ -267,6 +267,7 @@ class App.Model extends Spine.Model
@FULL_FETCH = {} @FULL_FETCH = {}
if !@FULL_FETCH[id] if !@FULL_FETCH[id]
@FULL_FETCH[id] = true @FULL_FETCH[id] = true
App.Log.debug('Model', "fetch #{@className}.find(#{id}) from server", url)
App.Ajax.request( App.Ajax.request(
type: 'GET' type: 'GET'
url: url url: url
@ -274,6 +275,8 @@ class App.Model extends Spine.Model
success: (data, status, xhr) => success: (data, status, xhr) =>
@FULL_FETCH[ data.id ] = false @FULL_FETCH[ data.id ] = false
App.Log.debug('Model', "got #{@className}.find(#{id}) from server", data)
# full / load assets # full / load assets
if data.assets if data.assets
App.Collection.loadAssets( data.assets ) App.Collection.loadAssets( data.assets )
@ -291,55 +294,10 @@ class App.Model extends Spine.Model
delete @FULL_CALLBACK[ data.id ] delete @FULL_CALLBACK[ data.id ]
error: (xhr, statusText, error) -> error: (xhr, statusText, error) ->
console.log(statusText, error) App.Log.error('Model', statusText, error, url)
) )
subscribeId subscribeId
@retrieve: ( id, callback, force ) ->
if !force && App[ @className ].exists( id )
data = App[ @className ].find( id )
data = @_fillUp( data )
if callback
callback( data )
return data
if force
console.log 'debug', 'find forced to load!', @className, id
else
console.log 'debug', 'find not loaded, load now!', @className, id
if callback
# store callback and requested id
if !@RETRIEVE_CALLBACK
@RETRIEVE_CALLBACK = {}
if !@RETRIEVE_CALLBACK[id]
@RETRIEVE_CALLBACK[id] = {}
key = @className + '-' + Math.floor( Math.random() * 99999 )
@RETRIEVE_CALLBACK[id][key] = callback
# bind refresh event
if !@RETRIEVE_BIND
@RETRIEVE_BIND = true
# check if bind for requested id exists
App[ @className ].bind 'refresh', (records) ->
for record in records
if @RETRIEVE_CALLBACK[ record.id ]
for key, callback of @RETRIEVE_CALLBACK[ record.id ]
data = callback( @_fillUp( App[ @className ].find( record.id ) ) )
delete @RETRIEVE_CALLBACK[ record.id ][ key ]
if _.isEmpty @RETRIEVE_CALLBACK[ record.id ]
delete @RETRIEVE_CALLBACK[ record.id ]
@fetchActive = false
# fetch object
console.log 'debug', 'loading..' + @className + '..', id
if !@fetchActive
@fetchActive = true
App[ @className ].fetch( id: id )
return true
return false
### ###
methodWhichIsCalledAtLocalOrServerSiteChange = (changedItems) -> methodWhichIsCalledAtLocalOrServerSiteChange = (changedItems) ->
@ -360,6 +318,7 @@ class App.Model extends Spine.Model
@bind( @bind(
'refresh change' 'refresh change'
(items) => (items) =>
App.Log.debug('Model', "local collection refresh/change #{@className}", items)
for key, callback of @SUBSCRIPTION_COLLECTION for key, callback of @SUBSCRIPTION_COLLECTION
callback(items) callback(items)
) )
@ -369,6 +328,7 @@ class App.Model extends Spine.Model
App.Event.bind( App.Event.bind(
events events
=> =>
App.Log.debug('Model', "server notify collection change #{@className}")
@fetch( {}, { clear: true } ) @fetch( {}, { clear: true } )
'Collection::Subscribe::' + @className 'Collection::Subscribe::' + @className
@ -419,7 +379,7 @@ class App.Model extends Spine.Model
# check if result is array or singel item # check if result is array or singel item
if !_.isArray(items) if !_.isArray(items)
items = [items] items = [items]
App.Log.debug('Model', "local change #{@className}", items)
for item in items for item in items
for key, callback of App[ @className ].SUBSCRIPTION_ITEM[ item.id ] for key, callback of App[ @className ].SUBSCRIPTION_ITEM[ item.id ]
item = App[ @className ]._fillUp( item ) item = App[ @className ]._fillUp( item )
@ -434,7 +394,7 @@ class App.Model extends Spine.Model
# check if result is array or singel item # check if result is array or singel item
if !_.isArray(items) if !_.isArray(items)
items = [items] items = [items]
App.Log.debug('Model', "local refresh #{@className}", items)
for item in items for item in items
for key, callback of App[ @className ].SUBSCRIPTION_ITEM[ item.id ] for key, callback of App[ @className ].SUBSCRIPTION_ITEM[ item.id ]
@ -454,12 +414,13 @@ class App.Model extends Spine.Model
genericObject = undefined genericObject = undefined
if App[ @className ].exists( item.id ) if App[ @className ].exists( item.id )
genericObject = App[ @className ].find( item.id ) genericObject = App[ @className ].find( item.id )
App.Log.debug('Model', "server change on #{@className}.find(#{item.id}) #{item.updated_at}")
callback = => callback = =>
if !genericObject || ( new Date(item.updated_at).toString() isnt new Date(genericObject.updated_at).toString() ) if !genericObject || new Date(item.updated_at) >= new Date(genericObject.updated_at)
App.Log.debug('Model', "request #{@className}.find(#{item.id}) from server")
@full( item.id, false, true ) @full( item.id, false, true )
App.Delay.set(callback, 800, item.id, "full-#{@className}") App.Delay.set(callback, 500, item.id, "full-#{@className}")
'Item::Subscribe::' + @className 'Item::Subscribe::' + @className
) )
@ -500,13 +461,15 @@ class App.Model extends Spine.Model
### ###
@fetchFull: (callback) -> @fetchFull: (callback) ->
url = "#{@url}/?full=true" url = "#{@url}/?full=true"
App.Log.debug('Model', "fetchFull collection #{@className}", url)
App.Ajax.request( App.Ajax.request(
type: 'GET' type: 'GET'
url: url url: url
processData: true, processData: true,
success: (data, status, xhr) => success: (data, status, xhr) =>
App.Log.debug('Model', "got fetchFull collection #{@className}", data)
# full / load assets # full / load assets
if data.assets if data.assets
App.Collection.loadAssets( data.assets ) App.Collection.loadAssets( data.assets )
@ -519,7 +482,7 @@ class App.Model extends Spine.Model
callback(data.stream) callback(data.stream)
error: (xhr, statusText, error) -> error: (xhr, statusText, error) ->
console.log(statusText, error) App.Log.error('Model', statusText, error, url)
) )
@_bindsEmpty: -> @_bindsEmpty: ->