上周在一个问题中作为I mentioned,我正在使用@coreyward的excellent walk-through来处理Rails 3中的模态编辑窗口。但是,我是Coffeescript的相对新手,我遇到了代码,它应该在成功的Ajax响应上显示模态窗口。这是相关函数(来自Corey's gist):
$ ->
$modal = $('#modal')
$modal_close = $modal.find('.close')
$modal_container = $('#modal-container')
# Handle modal links with the data-remote attribute
$(document).on 'ajax:success', 'a[data-remote]', (xhr, data, status) ->
$modal
.html(data)
.prepend($modal_close)
.css('top', $(window).scrollTop() + 40)
.show()
$modal_container.show();
$(document).on 'click', '#modal .close', ->
$modal_container.hide()
$modal.hide()
false
我已经确定函数内的所有代码都有效;它永远不会被召唤。我可以在Chrome网络面板中看到Ajax查询,并验证它是否返回了正确的响应。
我简化了代码以在ajax:success
事件上弹出提醒:
$(document).on 'ajax:success', () ->
alert('Ajax success event!')
......什么都没有。所以我认为'ajax:success'事件永远不会发生。
尝试提取重复问题的最简单的代码,我使用以下代码设置this jsFiddle:
<a href="javascript:$.ajax('/echo/js/?delay=2&js=WHEEEEE!');" data-remote="true">Edit</a>
$(document).on 'ajax:success', () ->
alert('Ajax success event!')
...是啊。没有。 jsFiddle Ajax echo返回它应该的内容,但函数永远不会被调用。所以我对.on('ajax:success')
做错了。 (这是与this question相反的问题,因此答案没有帮助。This question,关于响应的mime类型,看起来很有希望,但没有解释为什么jsFiddle没有不行,因为那不会触碰我的控制器。)这是什么?
ETA:我应该提到这里涉及的堆栈。 捂脸
答案 0 :(得分:0)
好的,明白了。我需要做两处修改:
text/json
MIME类型。我以前的行动看起来像这样: def edit
respond_to do |format|
format.js
format.html
end
end
为了获得text/json
回复,我结束了这个:
def edit
respond_to do |format|
format.js { render :json => { :html => render_to_string('edit')}, :content_type => 'text/json' }
format.html
end
end
该更改触发了ajax:success
,因此运行了开放模式函数。
data.html
而非data
,我需要调整modal.js.coffee
以实际将标记放入模式中: .html(data.html) // instead of .html(data)