首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Rails :Cannot set property 'innerHTML' of null有关问题解决

2012-10-07 
Rails :Cannot set property innerHTML of null问题解决环境:ruby 1.8.7 rails 2.2.2 数据库 sqlite?今

Rails :Cannot set property 'innerHTML' of null问题解决

环境:ruby 1.8.7 rails 2.2.2 数据库 sqlite

?

今天在练习在线商店的时候,使用Ajax技术向服务器发送请求,向购物车中添加物品的时候,浏览器报错:

Cannot set property 'innerHTML' of null,去看看server.log吧,竟然完全正常,再次刷新网页后,

刚刚选中的物品就显示在了购物车中,仔细的和书上对照了一下,也没发现什么异常,难道是rails的JavaScript

脚本有bug吗?

?

于是,下载FireFox,firebug,开始漫无目的的调试跟踪,因对JavaScript不熟悉,跟踪也是白跟,没有头绪

放弃了,都不知道再哪里加断点合适了,回过头来看看代码,究竟程序是怎么运行的

?

1.在add_to_cart.js.rjs中,新加了如下的代码,还不清楚倒是是干什么的,进去看看replace_html的注释,

? ?#Replaces the inner HTML of the DOM element with the given +id+.

?

? ?# +options_for_render+ may be either a string of HTML to insert, or a hash

? ?# of options to be passed to ActionView::Base#render.?

? ??找到了个貌似很面熟的东东,inner HTML?,不就是刚刚报错的东西吗!,注释的大概意思是:用inner HTML

? ?替换属性为id的元素, 那么这个id是外面传进来的"cart", 也就是说将一段代码插入到id为cart的元素中,看看

? ?id为cart的元素在哪里。。。

?

?

?

page.replace_html("cart", :partial => "cart", :object => @cart)

?

2.没找到啊,只找到了一段相似的代码

?

?

    <div class="cart"         <% if @cart.items.empty? %>         style="display: none"         <% end %>         >      <%= render(:partial => "cart", :object => @cart) %>    </div>

?

3.基本上知道哪里错了,这个div的属性笔误给写成class了,所以replace_html找不到id为cart的属性,所以就抛出了

?

Cannot set property 'innerHTML' of null的异常,将其修改为id属性,问题解决了!

?

?

总结:.replace_html("cart", :partial => "cart", :object => @cart)简单的理解就是将:partial => "cart",

:object => @cart作为render的参数插入到id为cart属性的html标签中,.replace_html内部会调用render方法

?

?

?

    <div id="cart"      <%= render(:partial => "cart", :object => @cart) %>    </div>

?

?

    def replace_html(id, *options_for_render)          call 'Element.update', id, render(*options_for_render)    end

热点排行