我喜欢分离功能的想法,这似乎是未来的方式。
但我习惯在嵌入式语言(如Rails ERB或PHP)中将javascript集成到循环中,我可以在javascript中使用特定对象的ID作为参考。
Rails示例:
<% @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 %>
这不是我唯一一次想要在javascript中使用Ruby方法的时候。我可能想要使用常量,或者在循环user.enabled?
或user.full_name
内的对象上调用其他ruby方法,或者使用这些对象渲染部分等。
那么如果所有的javascript都在另一个文件中或在循环之外,那该怎么办呢?我知道你可以使用CSS选择器在javascript中迭代一堆div,但这不允许我在对象上调用ruby方法。
我错过了什么?谢谢!
答案 0 :(得分:2)
我认为应该使用“data-id”参数完成,如此截屏视频中所示 http://railscasts.com/episodes/229-polling-for-changes
答案 1 :(得分:1)
对于您的特定示例,您已经在标记中编码了注释ID,因为您将div
元素的ID属性设置为注释ID。所以你可以把JavaScript挂掉。
答案 2 :(得分:0)
请原谅我使用jquery,但是没有它或类似的库,网页开发真的很糟糕
对于您的第一次投诉(获取最新评论),javascript this
可以正常使用。
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>
并在my_function
var comment_id = comment.attr('comment_id');
答案 3 :(得分:0)
使您的客户端脚本将'options'对象作为参数。不要使用任何服务器端脚本;将脚本放在自己的.js文件中。
然后使用输出js的服务器端脚本创建'options'对象。包括你的脚本并调用它的入口点函数,传入你的'options'对象。
答案 4 :(得分:0)
你需要更多的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>
优点:
(1)你没有遍布各处的javascript
(2)没有javascript工作