在Rails中不显眼的切换失败

时间:2010-05-30 06:00:32

标签: javascript ruby-on-rails unobtrusive-javascript

我已经在这几个小时,但它只是不工作。我正在尝试使用Scriptaculous'Effects库让ToggleJS工作。具体来说,例如:http://wiseheartdesign.com/page_attachments/0000/0075/demo.html

我使用名为new.html的纯html文件使其工作得非常漂亮。然后我将它转换为new.html.erb,这样我就可以将一些动画合并到我的Rails项目中,它就停止了工作!

我尝试了html和ruby javascript标签但都没有工作,例如:

<%= javascript_include_tag "application", "prototype", "effects", "lowpro", "toggle" %>

页面正文显示在浏览器上,但没有动画。我确保我的javascript文件与demo相同(另外,html文件仍在使用它们)。你知道我的.erb文件可能存在什么问题吗?

我正在使用的html示例:

<h3>Toggle.LinkBehavior</h3> 
    <div class="expand_me" id="one">Expanded!</div> 
    <p> 
      <a class="toggle" href="#one" rel="toggle[one]">Expand</a> 
    </p> 
    <div class="expand_me" id="two">Expanded! 1</div> 
    <div class="expand_me" id="three">Expanded! 2</div> 
    <p> 
      <a class="toggle" href="#two" rel="toggle[two,three]">Expand even more</a> 
    </p> 

#Application.js
Event.addBehavior({
   'a.toggle': Toggle.LinkBehavior(),
   'a.inverted_toggle': Toggle.LinkBehavior({invert: true}),
   'a.open': Toggle.LinkBehavior({
  effect: 'blind',
  onLoad: function(link) {
    this.toggle();
  },
  beforeToggle: function(link) {
    link.innerHTML = (link.innerHTML == "Open") ? "Opening..." : "Closing...";
  },
  afterToggle: function(link) {
    link.innerHTML = (link.innerHTML == "Opening...") ? "Close" : "Open";
  }
   }),
   'form input.checkbox.toggle': Toggle.CheckboxBehavior(),
   'form input.checkbox.inverted_toggle': Toggle.CheckboxBehavior({invert: true}),
   'form .radio_group.toggle': Toggle.RadioGroupBehavior({effect: 'blind'}),
   'form select.toggle': Toggle.SelectBehavior()
 });
Eimantas,我是一个全新的人。我在html doc中添加了以下内容,但它不起作用:

<script type="text/javascript">
window.onload = Event.addBehavior
</script>

这是你的意思,还是能告诉我在.html.erb文件中需要写什么代码?

1 个答案:

答案 0 :(得分:2)

你可以为javascript文件粘贴生成的HTML吗?

我认为您的toggle.js的加载时间晚于application.js,因此如果application.js具有切换效果的所有挂钩代码(window.onload...),则会因为库而失败本身尚未加载。

更新:

以下是将Event.addBehavior放入窗口加载的方法:

<script type="text/javascripts">
  window.onload = function() {
    Event.addBehavior({
      // all params and code.
    });
  }
</script>

您应该检查原型样式window.onload函数的原型文档。