javascript - Backbone Model triggers event conditionally, View doesn't hear it -
i'm creating geolocation model, fetching localstorage, , checking if have there latitude property there. if there isn't, 'geolocation:city_state_blank'
event triggered. if 'geolocation:city_state_blank'
heard, @get_users_geolocation()
fired.
class app.geolocation extends backbone.model initialize: -> @on 'geolocation:city_state_blank', -> @get_users_geolocation() @fetch().always => if @get('city_state').length 0 @trigger 'geolocation:city_state_blank' else @trigger('geolocation:done') get_users_geolocation: => # code / save (in localstorage) users geolocation , city / state @trigger('geolocation:done')
after get_users_geolocation()
done event geolocation:done
triggered.
i've removed details of fetching users geolocation / reverse geolocation lookups, asynchronous. end result of work boils down triggering geolocation:done
event.
class app.geolocationview extends backbone.view initialize: => @listento @model, 'geolocation:done', => alert('geolocation:done heard in view!!!!')
here problem:
in scenario when geolocation model fetches localstorage , determines property latitude
not set, , calls get_users_geolocation
— view alerts geolocation:done heard in view!!!!
but in scenario when geolocation has latitude property (the else), , triggers geolocation:done
right away, view does not alert anything. view doesn't hear it.
i've console.logged hell out of this, , can flow paths working. if/else working , view getting instantiated correctly. logging within callback after fetching localstorage yields this..
@fetch().always => console.log @get('current_city_state') console.log typeof @get('current_city_state') // norfolk, va // string
so, there data there..
what going on?? please!!
i'd guess latitude
property of app.geolocation
single number. leave test looking this:
if some_number.length 0
numbers don't have length
properties @get('latitude').length
undefined , you're left with:
if undefined 0
that false @trigger('geolocation:done')
gets called.
if you're interested in existence of latitude
property, coffeescript's existential operator (?
) server better:
if @get('latitude')? # there latitude. else # no latitude.
to see how ?
behaves have @ does:
class m extends backbone.model m = new m(p: 0) if m.get('p') == 0 console.log('p == 0') else console.log('p != 0') if m.get('p')? console.log('there p') else console.log('the p lie') if m.get('no')? console.log('yes no') else console.log('no no')
that give p == 0
, there p
, , no no
.
Comments
Post a Comment