有一件事我不知道';我不了解不引人注目的javascript
我喜欢分离功能的想法,这似乎是未来的发展方向 但我习惯于在嵌入式语言(如Rails ERB或PHP)中集成javascript内部循环,在这种语言中,我可以使用特定对象的ID作为javascript中的引用 Rails示例:有一件事我不知道';我不了解不引人注目的javascript,javascript,ruby-on-rails,unobtrusive-javascript,Javascript,Ruby On Rails,Unobtrusive Javascript,我喜欢分离功能的想法,这似乎是未来的发展方向 但我习惯于在嵌入式语言(如Rails ERB或PHP)中集成javascript内部循环,在这种语言中,我可以使用特定对象的ID作为javascript中的引用 Rails示例: <% @comments.each do |comment| %> <div id="comment_<%= comment.id %>"> <%= comment.text %> <% link_t
<% @comments.each do |comment| %>
<div id="comment_<%= comment.id %>">
<%= comment.text %>
<% link_to_function "Reply", "$('comment_#{comment.id}').insert(\"#{escape_javascript(render :partial => "_form", :locals => {:comment => comment})}\", {position: 'bottom'});" %>
</div>
<% end %>
“_form”,:locals=>{:comment=>comment}}\,{position:'bottom'});”%>
这也不是我唯一一次希望在javascript中使用Ruby方法。我可能想在循环user.enabled?
或user.full\u name
中的对象上使用常量,或调用其他ruby方法,或使用这些对象呈现部分,等等
那么,如果所有javascript都在另一个文件中或在循环之外,那么应该如何实现这一点呢?我知道你可以使用CSS选择器在javascript中迭代一堆div,但这不允许我在对象上调用ruby方法
我错过了什么?谢谢 我认为应该使用“数据id”参数来完成,如本屏幕广播所示 请原谅我使用jquery,但是如果没有它或类似的库,web开发真的很糟糕 对于您的第一个投诉(获取当前评论),javascript
这个
适合我
onclick="my_function(this);"
在js文件中
my_function = function(target) {
// clicked element passed in
// now, let's get comment element by class
var comment = $(target).parents('.comment');
}
至于第二次投诉。。。我从不经常需要它,但有时我会在html中包含一些数据片段供javascript使用。扩展前面的示例:
<div class="comment" comment_id="<%= comment.id %>"></div>
对于您的特定示例,您已经在标记中编码了注释ID,因为您将
div
元素的ID属性设置为注释ID。因此您可以挂起JavaScript。使客户端脚本将“options”对象作为参数。不要使用任何服务器端脚本;将脚本放在它自己的.js文件中
然后使用输出js的服务器端脚本创建“options”对象。包括脚本并调用其入口点函数,传入“options”对象 您只需要更多的JavaScript知识就可以看到它的威力,尤其是jQuery。我要解决的示例如下:
<% @comments.each do |comment| %>
<div class="comment">
<%= comment.text %>
<a href="reply.php?id=<%= comment.id %>" class="reply">Reply</a>
</div>
<% end %>
<script type="text/javascript">
$('.comment .reply').click(function(e) {
e.preventDefault();
var url = $(this).attr('href');
var result = url.match(/\?id=(\d+)([^\d]|$)/);
var id = (result && result[1]);
if (id) {
// do whatever you want to do with the id
}
});
</script>
$('.comment.reply')。单击(函数(e){
e、 预防默认值();
var url=$(this.attr('href');
var result=url.match(/\?id=(\d+)([^\d]|$)/);
变量id=(结果和结果[1]);
如果(id){
//你想用身份证做什么就做什么
}
});
好处:
(1) 你没有到处都是javascript
(2) 在外部javascript库或文件中使用Ruby方法时不使用javascript,这意味着您只能在Ruby应用程序中使用这些库或文件。考虑查看jQuery;研究jQuery使用参数化解决此问题的方法。我将插入我自己关于此主题的博文:有意义,我可以获取id。但我仍然无法从ruby方法中生成文本,对吗?这允许您在javascript中获取id,但是你仍然不能在javascript中的对象上调用Ruby方法来生成文本。谢谢这个策略的某些地方仍然让我有点不舒服(它在rails和javascript参数之间增加了另一个步骤,这又是一个混乱的地方)。另外,将整个渲染部分放置在数据属性中有意义吗?我想你可以,只是看起来很奇怪。
<% @comments.each do |comment| %>
<div class="comment">
<%= comment.text %>
<a href="reply.php?id=<%= comment.id %>" class="reply">Reply</a>
</div>
<% end %>
<script type="text/javascript">
$('.comment .reply').click(function(e) {
e.preventDefault();
var url = $(this).attr('href');
var result = url.match(/\?id=(\d+)([^\d]|$)/);
var id = (result && result[1]);
if (id) {
// do whatever you want to do with the id
}
});
</script>