我有一个成功回调模型提取,并且一切正常在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是另一个问题。 Bonus感谢您帮助我弄清楚为什么JSON只能以那种错综复杂的方式运作。
答案 0 :(得分:2)
首先,您需要了解=>之间的区别。和 - >用于在coffeescript中定义函数。
=>将函数内的 this 绑定到函数定义的 时 。
- >将函数内的 this 绑定到函数 时
self = this
是coffeescript中的代码气味标志,当您尝试捕获此以解决问题=>时,您无法正确理解如何正确使用上述内容。解决了。
你重写的渲染函数可能是
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会扩展到this.USER和 无论这个可能是什么时候调用回调可能是相当随机的 在您的框架和浏览器上。
答案 1 :(得分:2)
由于我的成功回调是JSON对象的一部分,因此firefox无法找到它正在查找的默认值,因此没有触发任何内容。指定dataType:'json'在获取时解决了这个问题,因为firefox知道在哪里寻找成功回调。
Chrome显然是在想我......