1

我喜欢分离功能的想法,这似乎是未来的方式。

但是我习惯于在像 Rails ERB 或 PHP 这样的嵌入式语言中将 javascript 集成到循环中,在那里我可以使用特定对象的 ID 作为 javascript 中的引用。

导轨示例:

<% @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 方法。我可能想使用常量,或者在循环内的对象上调用其他 ruby​​ 方法,user.enabled?或者user.full_name使用这些对象渲染部分,等等。

那么如果所有的 javascript 都在另一个文件中或循环之外,这应该如何实现呢?我知道您可以使用 CSS 选择器在 javascript 中遍历一堆 div,但这不允许我在对象上调用 ruby​​ 方法。

我错过了什么?谢谢!

4

5 回答 5

2

我认为应该使用“data-id”参数完成,如截屏视频 http://railscasts.com/episodes/229-polling-for-changes所示

于 2010-09-07T19:54:32.977 回答
1

对于您的特定示例,您已经在标记中编码了评论 ID,因为您将div元素的 ID 属性设置为评论 ID。所以你可以把 JavaScript 挂起来。

于 2010-09-07T19:56:32.983 回答
0

请原谅我使用 jquery,但如果没有它或类似的库,Web 开发真的很糟糕

对于您的第一次投诉(获取当前评论),javascriptthis对我来说很好。

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');
于 2010-09-07T19:56:01.277 回答
0

让您的客户端脚本将“选项”对象作为参数。不要使用任何服务器端脚本;将脚本放在它自己的 .js 文件中。

然后使用输出 js 的服务器端脚本创建“选项”对象。包含您的脚本并调用其入口点函数,传入您的“选项”对象。

于 2010-09-07T20:01:51.500 回答
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 即可工作

于 2010-09-07T20:06:32.363 回答