[英]Ruby on Rails and jeditable (jquery)
有没有人得到了jQuery插件jeditable在一个Rails应用程序正常运行。 如果是这样,你能否分享一些关于如何设置它的提示? 我在创建“submit-url”时遇到了一些麻烦。
IIRC,你不能简单地在javascript中调用ruby代码(请让我错了:-)。 你的意思是RJS ??? 这不仅限于Prototype吗? 我正在使用jQuery。
更新:
呃.....一会儿问这个问题,同时转向另一个解决方案。 但是IIRC我的主要问题如下:
我正在使用RESTful资源。 所以,假设我必须为博客建模,因此拥有资源“帖子”。 如果我想编辑帖子(例如ID为8的帖子),我的更新将通过HTTP发送到带有HTTP动词POST的URL http://my.url.com/posts/8 。 但是,此URL是在我的Rails代码中构建的。 那么我如何将我的submit-url放入我的jQuery代码中? 由于这是RESTful代码,因此我的更新URL将随每个帖子而变化。
以下是我使用我的Restful Rails应用程序(2.2.2)连接JEditable(1.6.2)的方法:
内联表格:
<div id="email_name"><%= h( @email.name ) %></div>
$('#email_name').editable( <%= email_path(@email).to_json %>, {
name: 'email[name]',
method: 'PUT',
submitdata: {
authenticity_token: <%= form_authenticity_token.to_json %>,
wants: 'name'
}
});
控制器:
def update
@email = Email.find( params[:id] )
@email.update_attributes!( params[:email )
respond_to do |format|
format.js
end
end
update.js.erb
<%=
case params[:wants]
when 'name' then h( @email.name )
# add other attributes if you have more inline forms for this model
else ''
end
%>
这个switch语句有点笨拙。 如果ajax请求成功并且没有返回任何内容,那么如果JEditable默认只保存提交的值,那将是很好的。
请原谅我现在才提出这个问题,但我只是找时间再次查看我的代码。 我想我通过以下javascript(我在rails中的application.js)解决了我的问题:
jQuery(document).ready(function($) {
$(".edit_textfield").each( function(i) {
$(this).editable("update", {
type : 'textarea',
rows : 8,
name : $(this).attr('name'),
cancel : 'Cancel',
submit : 'OK',
indicator : "<img src='../images/spinner.gif' />",
tooltip : 'Double-click to edit...'
})
});
});
如果您的Controller URL是RESTful,这是有效的。
如果你在你的html中包含.js文件,那么没有,但是如果你的视图模板中有js inline,那么你可以。
您还可以拥有.erb.js文件,这些文件是js视图。
一切皆有可能:D
我不确定我完全理解你遇到的问题,但我认为你可以在你的javascript中加入这样的东西:
<%= url_for(@post) %>
这取决于你是如何构建你的javascript,如何组织你的文件等...
如果你的控制器比安静的少一点。 特别是如果您有更新特定字段的操作,那么这也适用。 关键是传递身份验证令牌。
index.html.erb
<span id="my_edit"><%= foo.bar %></span>
<script type="text/javascript">
$(document).ready(function() {
$("#my_edit").editable('<%= url_for(:action => "update_bar",
:id => foo) %>',
{
method: 'PUT',
cancel : 'Cancel',
submit : 'OK',
indicator : "<img src='../images/spinner.gif' />",
tooltip : 'Double-click to edit...',
submitdata: {
authenticity_token: <%= form_authenticity_token.to_json %>,
}
}
});
</script>
过度简化的控制器不能证明不是安静的:
foo_controller.rb
def update_bar
foo = Foo.find(params[:id])
bar= params[:value]
// insert justifiable code here
foo.save
render :text=>params[:value]
end
(使用Rails 2.2.2和2.3.2 w / Jeditable 1.7.0和jRails 0.4,虽然除了为jQuery 1.5提供包含之外,jRails在这里没有太多的交互)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.