从Prototype迁移到jQuery(适用于新手)
Migrate from Prototype to jQuery (for newbie)
我使用的是RubyonRails 3,我想使用jQuery而不是Prototype(这就是我目前使用的)。我读了很多书、指南和教程,但我仍然不明白如何在代码中使用jQuery(也许它让没有人"真正"清楚这一点)。此外,我有很多使用Prototype编写的代码,所以我想同时处理这两个问题,并"逐步"迁移到jQuery。
我在制作<%= javascript_include_tag :defaults, 'jquery' %>
的布局文件中包含了jQuery文件,因此<script src="/javascripts/jquery.js?1307515315" type="text/javascript"></script>
出现在所有HTML页面的源代码中。为了避免application.js
文件中的错误,我在application.js
文件中添加了jQuery.noConflict()
。现在,我必须做什么
如果我在application.js
文件中声明jQuery方法
jQuery(document).ready(function() {
jQuery('#test_id2').click(function() {
alert('Handler for .click() called.');
});
})
我用称之为
<%= link_to 'change1', '#', :id => 'test_id1' %>
它会起作用,但我想把上面的代码放在一个单独的js
文件中我该怎么办
控制器操作的JS文件必须如何命名?我必须在哪里(在哪个文件夹中)找到相关的JS文件?如何在控制器中说明respond_to
方法
def edit
...
respond_to do |format|
format.html # render edit.html.erb
format.js # render... what file?! where?!
end
end
使用Prototype,我可以直接在视图文件中编写代码,如下所示:
<%= link_to_function( "change", :id => 'test_id2' ) do |page|
page[:test_id3].toggle
...
end %>
如何在视图文件中使用jQuery
你有什么建议吗
更新
在我的edit.js.erb
文件中,我有
<%
jQuery(document).ready(function() {
jQuery('#test_id1').click(function() {
alert('Handler for .click() called.');
});
})
%>
在edit.html.erb
文件中,我有
<%= link_to 'Test link', '#', :id => 'test_id1' %>
但当我点击上面的链接时,jQuery不起作用(alert方法不会触发)。此外,如果我试图直接在视图文件中插入JavaScript代码,我会得到以下错误:
NameError: undefined local variable or method `document' for #<#<Class:0x00000102aa04d0>:0x00000102a75eb0>
有两件不同的事情。
它们是正则脚本,您可以使用与jquery相同的方式加载:您将它们放在public/javascript
目录中,并将它们包含在中
<%= javascript_include_tag YourNameFile %>
请注意,我没有添加.js.javascript_include_tag
会为您添加的。
然后您就有了JS模板。这就像你的原型视图。除了你里面有Jquery。所以你以前所做的是有效的!如果您使用
respond_to do |format|
format.html # render edit.html.erb
format.js # render edit.js.erb
end
它将渲染edit.js.erb
(您可以在与edit.html.erb
文件相同的目录中找到它)。
然后,您可以在这些文件中添加jQuery和"ruby"(与原型完全相同)。只需确保加载jQuery即可。
如果我遗漏了什么,请添加评论。:)
===编辑===
在您的Templates中,您必须将<% %>
仅放在Rails函数周围!!否则,它应该是Javascript。所以edit.js.erb
应该看起来像:
jQuery(document).ready(function() {
jQuery('#test_id1').click(function() {
alert('Handler for .click() called.');
});
})
您的文件应该命名为*.js.erb,并且位于视图文件夹中(就像您的*.html.erb一样),它们的命名应该像您命名*.html.erp文件一样,即edit.js.erb用于编辑操作。您可以在这些文件中编写ruby代码,就像在prototype中一样(<%….%>)。使用jQuery时,通常使用选择器。例如,如果你需要在<div id=someid></div>
结构中替换页面上的一些html代码,你可以这样做(#before element id很重要):
$("#someid").html('<%= ... some ruby here, it can be render or anything ... %>')
如果你需要在某个元素后面插入一些东西,你可以这样做:
$('<div>Some text</div>').insertAfter("#someid")
等等。
- AddEventListener适用于浏览器,但不适用于Android
- 查找仅适用于原始图像的图像放大算法的名称
- 如何在category.php中执行jquery,这应该适用于类别wordpress中的每个帖子
- Web编程,简单但适用于机器人项目
- JavaScript不适用于internet explorer和Firefox,但适用于谷歌
- Jquery事件处理程序仅适用于匿名函数
- jQuery调整大小函数只适用于窗口
- 火灾在卸载前确认警报仅适用于外部站点
- EmberJS-适用于各种模型的适配器动态名称空间
- Facebook共享链接适用于用户,但不适用于粉丝页面管理员
- jQuery-适用于移动设备的多级菜单
- 循环中的切换脚本只适用于第一次迭代
- 为什么setTimeout适用于无休止的递归调用
- 我未保存的更改指令需要适用于具有不同名称的所有表单
- 适用于多种浏览器的Selenium-需要能够执行javascript的webDriver
- Sails.js/Waterline.add()和.remove()仅适用于第二次调用
- jQuery点击事件仅适用于横向(iPhone)
- HTML5 Canvas toDataURL(“image/png”)适用于一些绘画,而有些则不然,不确定原因
- jQuery表单验证(如果==“执行此操作”)仅适用于第一次输入
- 从Prototype迁移到jQuery(适用于新手)