2013-01-08 35 views
0

我有rails 3.2.1和测试JQuery UI,我想显示一个DatePicker。因此,在“new.hmtl.erb”页面上我已经把下面的标签:Rails:如何使用JQueryUI

<p>Date: <input type="text" id="datepicker" /></p> 

在project.js.coffee(以下简称“新”视图页面由项目控制器渲染)我”已写:

$("#datepicker").datepicker(); 

为什么DatePicker doensn't不出现?

在新页面的源代码我:

<script src="/assets/projects.js?body=1" type="text/javascript"></script> 

包含:

(function() { 
    $("#datepicker").datepicker(); 
}).call(this); 

我必须包括一些宝石?在我的application.js有:

//= require jquery 
//= require jquery_ujs 
//= require_tree . 

感谢

回答

1

部分,将初始化UI对象转到页在你的情况下new.html.erb代码。您将其添加到底部为:

<script> 
    $(document).ready(function() { 
    $("#datepicker").datepicker(); 
    }); 
</script> 

这意味着当页面加载时它将初始化您的输入对象。如果您需要这部分代码在多个页面中可用,请在application.html.erb布局中添加此代码。有关布局的更多信息,请参阅Rails指南页面。

编辑

对于这里的教育目的是补充意见: 如果你想要把代码application.js你可以做到以下几点:

function setDatePicker() { 
    $("#datepicker").datepicker(); 
} 

,然后做

<script> 
    $(document).ready(function() { 
    setDatePicker(); 
    }); 
</script> 

如果你想要在application.js加载时执行的代码,你只需要放入它没有包装它的功能(不建议)。它会在加载application.js时执行,但它不起作用,因为它可以在加载DOM之前触发(也可能会)。所以总是使用jquery的.ready

+0

Thx ...如果我把这个代码放在new.html.erb里面。但是,我可以把它放在application.js中吗? – Tom

+0

把它保存在application.js中是没有意义的。如果你创建页面“show.html.erb”,那么你不会在页面上有datapicker输入,它会中断。你可以做的是在'application.js'中创建函数'setDatePicker()',并从'.ready'中调用它。根据我的经验,如果此代码是特定于此页面的规则(这是因为您正在引用此页面上的HTML元素的ID),而不应该进入“application.js”。 –

+0

我同意你的看法......但它只是为了学习如何工作....为什么如果我把脚本代码放在application.js中不起作用?我不能把它放在那里? – Tom