1

我们正在开发rails 3.2.12具有多个rails engines. 中有导航栏和用户菜单main app。功能模块在 rails 中engine。其中之一enginecustomerx允许用户管理客户信息,例如创建客户、更改客户信息等。

上周我们bootstrap在 rails_main 应用程序中添加了利用 bootstrap 的良好格式。我们发现的问题是 jquerydatepicker和 html 插入功能在 rails 引擎中停止工作。

这是main app's application.js

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

application.js 中有需要引导程序。

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

//= 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

ReferenceError: add_fields is not defined

在主应用程序中添加引导程序后datepicker,总之engines也不再工作了。

我们在网上做了一些搜索。bootstrap需要jquery工作。jquery-ui但是和之间可能存在冲突bootstraprequire bootstrp我们通过将 放在底部来遵循建议main app's application.js。我们也尝试$.noConflict()main app's application.js. 然而,这些还不足以共同制作bootstrapjquery工作。我们还需要做什么才能jquery(ui)与之rails engine合作bootstrap?谢谢您的帮助。

4

2 回答 2

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));

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

引导程序和 jQuery UI

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

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

  1. 完全放弃 jQuery UI 并使用 Bootstrap 的数据选择器。它也很好。
  2. 使用包含它们两个的经过调整的库,例如jQuery UI Bootstrap或此库的匹配 Rails gem

如果您想坚持使用 Bootstrap 并且没有太多需要修改的日期选择器,我更喜欢解决方案 #1。

于 2013-05-11T15:14:01.473 回答
0

我们发现根本没有加载assetsfor 。rails engines这就是为什么所有 js 功能都不适用于引擎的原因。这是main app's application.js现在:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_tree .
//= require my_engine_name/application.js
//= require bootstrap

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

引擎在 Rails 3.1 中的资产

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

于 2013-05-11T18:07:29.790 回答