Mercury 编辑器 'saved' 事件未触发
Mercury Editor 'saved' event not firing
我的 Mercury Gem - 版本 0.9.0
gem 'mercury-rails', git: 'https://github.com/jejacks0n/mercury.git'
我正在使用 Rails4
最初遵循 RailsCast,我在 Mercury.js 中有以下内容:
$(window).bind('mercury:ready', function() {
var link = $('#mercury_iframe').contents().find('#edit_link');//extract the saveURL for mercury that was encoded in the HTML data tag
Mercury.saveUrl =link.data('save-url');
console.log("Mercury save URL: "+Mercury.saveUrl);
link.hide();//hide edit url
});
$(window).bind('mercury:saved', function() {
console.log("mercury saved event set");
window.location.href = window.location.href.replace(/\/editor\//i, '/');
});
但是,RailsCast 评论说现在应该覆盖 onload 函数:
window.Mercury = {
//...
//CUSTOM CODE
onload:function(){
Mercury.on('saved',function(){
console.log("SAVE EVENT FIRED");
window.location.href = window.location.href.replace(/\/editor\//i, '/');
});
Mercury.on('ready',function(){
var link = $('#mercury_iframe').contents().find('#edit_link');//extract the saveURL that was encoded in the HTML data tag
Mercury.saveUrl =link.data('save-url');
console.log("Mercury save URL: "+Mercury.saveUrl);
link.hide();//hide edit url
});
}
};
但是,保存的事件永远不会触发,也永远不会发生重定向。关于做事的新方法和改进方法有什么想法吗?谢谢!
编辑:澄清一下,“Mercury.on('ready'...)”事件确实成功触发。
编辑:好的,所以我发现 'saved' 事件适用于一条路线,但不适用于另一条路线。
#Works on this route!
def mercury_update_courses
courses_infos = params[:content]
courses_infos.each{|course_info|
label = course_info[0]
new_val = course_info[1][:value]
id = label.delete("^0-9")#find the database id by removing everything that's not a number from the HTML element's CSS id
course = EditablePage.where("id == ?",id).last
if label.index("title") != nil
course.title = new_val
elsif label.index("body") != nil
course.body = new_val
end
course.save!
}
render text: ""
end
#does not work on this route!
def mercury_update_index
homepage = EditablePage.find(params[:id])
homepage.body = params[:content][:homepage_content][:value]
homepage.save!
render text: ""
end
发现问题了!毕竟保存事件实际上是有效的。
console.log("SAVE EVENT FIRED");
没有出现,因为它被放置在重定向之前,这会擦除 JS 控制台。在我发现它在一个页面而不是另一个页面上工作后,我试图找出这些页面的不同之处,发现问题出在 URL.
#working
http://localhost:3000/editor/courses
#not working
http://localhost:3000/editor
因此问题出在我从我遵循的教程中复制粘贴的神秘正则表达式
window.location.href = window.location.href.replace(/\/editor\//i, '/');
是罪魁祸首。非工作编辑器在站点的 root/homepage 上,因此没有在 url 的“/editor/”部分中包含第二个“/”。我通过制作更通用(更易于理解)的替换行
来解决此问题
window.location.href = window.location.href.replace("/editor", '');
最终代码:
window.Mercury = {
//...
//CUSTOM CODE
onload:function(){
Mercury.on('saved',function(){
window.location.href = window.location.href.replace("/editor", '');
console.log("Mercury info saved!");
});
Mercury.on('ready',function(){
var link = $('#mercury_iframe').contents().find('#edit_link');//extract the saveURL that was encoded in the HTML data tag
Mercury.saveUrl =link.data('save-url');
console.log("Mercury save URL: "+Mercury.saveUrl);
link.hide();//hide edit url when mercury is open
});
}
};
我的 Mercury Gem - 版本 0.9.0
gem 'mercury-rails', git: 'https://github.com/jejacks0n/mercury.git'
我正在使用 Rails4
最初遵循 RailsCast,我在 Mercury.js 中有以下内容:
$(window).bind('mercury:ready', function() {
var link = $('#mercury_iframe').contents().find('#edit_link');//extract the saveURL for mercury that was encoded in the HTML data tag
Mercury.saveUrl =link.data('save-url');
console.log("Mercury save URL: "+Mercury.saveUrl);
link.hide();//hide edit url
});
$(window).bind('mercury:saved', function() {
console.log("mercury saved event set");
window.location.href = window.location.href.replace(/\/editor\//i, '/');
});
但是,RailsCast 评论说现在应该覆盖 onload 函数:
window.Mercury = {
//...
//CUSTOM CODE
onload:function(){
Mercury.on('saved',function(){
console.log("SAVE EVENT FIRED");
window.location.href = window.location.href.replace(/\/editor\//i, '/');
});
Mercury.on('ready',function(){
var link = $('#mercury_iframe').contents().find('#edit_link');//extract the saveURL that was encoded in the HTML data tag
Mercury.saveUrl =link.data('save-url');
console.log("Mercury save URL: "+Mercury.saveUrl);
link.hide();//hide edit url
});
}
};
但是,保存的事件永远不会触发,也永远不会发生重定向。关于做事的新方法和改进方法有什么想法吗?谢谢!
编辑:澄清一下,“Mercury.on('ready'...)”事件确实成功触发。
编辑:好的,所以我发现 'saved' 事件适用于一条路线,但不适用于另一条路线。
#Works on this route!
def mercury_update_courses
courses_infos = params[:content]
courses_infos.each{|course_info|
label = course_info[0]
new_val = course_info[1][:value]
id = label.delete("^0-9")#find the database id by removing everything that's not a number from the HTML element's CSS id
course = EditablePage.where("id == ?",id).last
if label.index("title") != nil
course.title = new_val
elsif label.index("body") != nil
course.body = new_val
end
course.save!
}
render text: ""
end
#does not work on this route!
def mercury_update_index
homepage = EditablePage.find(params[:id])
homepage.body = params[:content][:homepage_content][:value]
homepage.save!
render text: ""
end
发现问题了!毕竟保存事件实际上是有效的。
console.log("SAVE EVENT FIRED");
没有出现,因为它被放置在重定向之前,这会擦除 JS 控制台。在我发现它在一个页面而不是另一个页面上工作后,我试图找出这些页面的不同之处,发现问题出在 URL.
#working
http://localhost:3000/editor/courses
#not working
http://localhost:3000/editor
因此问题出在我从我遵循的教程中复制粘贴的神秘正则表达式
window.location.href = window.location.href.replace(/\/editor\//i, '/');
是罪魁祸首。非工作编辑器在站点的 root/homepage 上,因此没有在 url 的“/editor/”部分中包含第二个“/”。我通过制作更通用(更易于理解)的替换行
来解决此问题window.location.href = window.location.href.replace("/editor", '');
最终代码:
window.Mercury = {
//...
//CUSTOM CODE
onload:function(){
Mercury.on('saved',function(){
window.location.href = window.location.href.replace("/editor", '');
console.log("Mercury info saved!");
});
Mercury.on('ready',function(){
var link = $('#mercury_iframe').contents().find('#edit_link');//extract the saveURL that was encoded in the HTML data tag
Mercury.saveUrl =link.data('save-url');
console.log("Mercury save URL: "+Mercury.saveUrl);
link.hide();//hide edit url when mercury is open
});
}
};