Успешный обратный вызов model.fetch не запускается в Firefox, но работает в Chrome - PullRequest
2 голосов
/ 27 июля 2011

У меня успешный обратный вызов для выборки модели, и все отлично работает на chrome, но на firefox событие не срабатывает.Однако запрос выполняется согласно консоли.

Пример кода:

Функция родительского класса:

DownloadUserPromotions: (callback) ->
    self = @
    @model = new app.models.client({ id: JSON.parse($.cookie('jsondata')).id })

    lm = ->
      console.log "4"
      window.USER = self.model
      if typeof callback == 'function' then callback.call()   

    @model.fetch
      success: lm
      data: 
        relationships: 'client_promotions'
    console.log "3"

Функция просмотра:

render: ->      
    self = @
    self.ReadUserInfo()
    console.log "1"
    renderTemplate = ->
      console.log "5"
      #Below Issue is wierd.......#TODO
      @USER = JSON.parse(JSON.stringify(@USER))
      $(self.el).html clientsPromotionsTemplate
        promos: USER.client_promotions
      $('.spinner#load').hide()
      self.FadeIn()

    $('.spinner#load').show()
    console.log "2"
    @DownloadUserPromotions renderTemplate  
    @

Боковое примечание: Помеченный TODO - это другая проблема.Бонус спасибо за то, что помогли мне понять, почему JSON работает только таким замысловатым образом.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Так как мой успешный обратный вызов был частью объекта JSON, firefox не смог найти то, по умолчанию он искал, и поэтому ничего не запустил.Указание dataType: 'json' при извлечении решает эту проблему, потому что firefox знает, где искать успешный обратный вызов.

Chrome, по-видимому, читает мои мысли ...

2 голосов
/ 27 июля 2011

Прежде всего вам нужно понять разницу между => и -> для определения функций в coffeescript.

=> связывает это внутри функции с тем, что это было, когда функция была определена .

-> связывает этот внутри функции с тем, что это было, когда функция называется

self = this  

- это знак запаха кода в coffeescript, который вы не понимаете, как правильно использовать вышеизложенное, когда пытаетесь захватить this для решения проблемы, которая => решается.

Ваша функция рендеринга может быть переписана как

render: ->
    @ReadUserInfo()
    console.log "1"
    renderTemplate = =>
      console.log "5"
      #Below Issue is wierd.......#TODO
      @USER = JSON.parse(JSON.stringify(@USER))
      $(@.el).html clientsPromotionsTemplate
        promos: USER.client_promotions
      $('.spinner#load').hide()
      @.FadeIn()

    $('.spinner#load').show()
    console.log "2"
    @DownloadUserPromotions renderTemplate
    @

И, вероятно, исправит некоторые ваши странные проблемы. Раньше я был уверен что линия у вас была

    @USER = JSON.parse(JSON.stringify(@USER))

никогда бы не работал так, как вы ожидали, так как @USER был бы расширен до этого .USER и все, что это может быть, когда обратный вызов вызывается может быть довольно случайным в зависимости в вашем фреймворке и браузере.

...