身心俱疲,Ajax真是难以吐槽的一章,各种bug,看来咱这本书虽然是2011年的,但已经过时了,回头必须看看有没有新的英文版教材。
ajax另一个蛋疼的地方是,我没有找到像以前一样单步调试的方式,也不容易跟踪错误(也许该试试Firebug?),只能看错误log。
做好准备,让我们来吧。
1,create.js.rjs没有作用
原因我也不太清楚,不知道是不是rjs类型的文件过时了。。
菜鸟解决方案:
1,将app/views/line_items/create.js.rjs文件的后缀名rjs换为erb。
2,内容变为
$('#cart').html("<%= escape_javascript(render(@cart)) %>");
没错,这就是jquery的语法,该erb文件先进行解释,将<%= escape_javascript(render(@cart)) %>解释为应有的内容,然后整体文件变为js加载,用chrome的查看源代码是看不出来的。
这样就可以看到ajax后的变化了~
2,Yellow Fade不褪色。
原有方法依旧不能用,我们可以用jquery的语法来实现相同的效果。
菜鸟解决方法:
1,首先下载jquery.color.js。
复制存为名称为jquery.color.js的文件就好。再将该文件存至app/assets/stylesheets/目录下。
最后在app/views/layouts/application.html.erb文件中加入这么一行(位置不用多说吧?),将该js文件导入
<%= javascript_include_tag "jquery.color" %>
2,在app/views/line_items/create.js.erb文件中加入一行
$('#current_item').css({ 'background-color': "#88ff88" }).animate({ 'background-color': "#114411" }, 1000);
3,隐藏购物车,书上前面几种方法不行,还报错,幸好最后一种是正确的。
4,11.5节的测试中,在修改完书上的错误后,还有个错误
NoMethodError: undefined method `cart' for nil:NilClass
位置是app/controllers/carts_controller.rb:52:in `block (2 levels) in create
来看代码
1 def create 2 @cart = Cart.new(params[:cart]) 3 4 respond_to do |format| 5 if @cart.save 6 format.html { redirect_to(@line_item.cart)} 7 format.json { render json: @cart, status: :created, location: @cart } 8 else 9 format.html { render action: "new" } 10 format.json { render json: @cart.errors, status: :unprocessable_entity } 11 end 12 end 13 end
注意第6行中的@line_item,在最一开始建立购物车的时候,@line_item是不存在的,而此处重定向只需定向到刚保存的@cart就好。
解决方法:
将上述代码第六行中的@line_item.cart换为@cart
测试即可通过。
5.测试时报错StandardError, "No fixture with name '#{fixture}' found for table 'products'
尚未解决,不过不影响网站运行。
这有篇参考看不太懂http://hi.baidu.com/rainchen/item/c34f3b49e34dc00ae93504c0
----------------------------------------------------------------new ver 分割线-------------------------------------------------------------------------
已解决,拼写错误,我没有像书上一样在测试products数据中建一个name叫ruby:的条目,但在其他地方引用了,如:products=>(:ruby),所以上面那句话就好理解了吧。。
另:一些语法概念我已经忘了= =,不知道各位是不是这样,建议返回第四章再看一下。。