如何制作bootstrap& jquery在rails 3.2.12应用程序中一起工作哪个有轨道引擎?

时间:2013-05-11 13:26:02

标签: ruby-on-rails-3 twitter-bootstrap jquery

我们正在开发具有多个rails 3.2.12的{​​{1}}个应用。 rails engines中有导航栏和用户菜单。功能模块位于导轨main app中。其中一个engine称为engine,它使用户能够管理客户信息,例如创建客户,更改客户信息等。

上周我们在rails_main应用中添加了customerx,以利用漂亮的bootstrap格式。我们发现的问题是jquery bootstrap和html插入功能在rails引擎中停止工作。

以下是datepicker

main app's application.js

application.js中需要bootstrap。

我们没有在rails引擎的application.js中放置require bootstrap。这是引擎的application.js:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
//= require bootstrap

点击//= require jquery //= require jquery_ujs //= require jquery-ui //= require_tree . function add_fields(link, association, content) { var new_id = new Date().getTime(); var regexp = new RegExp("new_" + association, "g") $(link).parent().before(content.replace(regexp, new_id)); } 上的add_more_contact链接时,new customer form出现错误:

firebug

在主应用程序中添加bootstrap之后,所有ReferenceError: add_fields is not defined 中的datepicker也无法正常工作。

我们在线进行了一些搜索。 engines需要bootstrap才能运作。但是jqueryjquery-ui之间可能存在冲突。我们将bootstrap置于require bootstrp的底部,遵循建议。我们还尝试在main app's application.js中使用$.noConflict()。但是,这些还不足以让main app's application.jsbootstrap一起工作。还需要做些什么才能使jquery jquery(ui)rails engine合作?谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

修复add_fields

首先让我们修复add_fields。此函数称为jQuery($(link)),但在全局命名空间中定义。这就是为什么它不起作用。

要在全局命名空间中使用jQuery函数编写函数,需要将其编写为jQuery插件

(function($) {
  $.fn.add_fields = function(link, association, content) {
    var new_id = new Date().getTime();
    var regexp = new RegExp("new_" + association, "g")
    $(link).parent().before(content.replace(regexp, new_id));
  };
}(jQuery));

然后你可以在jQuery中使用add_fields()

Bootstrap和jQuery UI

这两个库之间存在一些冲突。你不能在没有任何改变的情况下一起使用它们。

据我所知,根据你的情况,这里有两个解决方案:

  1. 完全放弃jQuery UI并使用Bootstrap的datapicker。这也很好。
  2. 使用包含两个的调整后的lib,例如此jQuery UI Bootstrapa matching Rails gem
  3. 如果你想坚持使用Bootstrap并且没有太多的日期选择器来修改,我宁愿选择解决方案#1。

答案 1 :(得分:0)

我们发现assets的{​​{1}}根本没有加载。这就是为什么所有js功能都不适用于engins。现在是rails engines

main app's application.js

以下是提供有关如何为rails引擎加载资产的解决方案的帖子:

Engine's assets with Rails 3.1

为什么添加bootstrap会导致引擎资产消失,我们还不知道。希望有人可以解释问题的原因。