我们正在开发具有多个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
才能运作。但是jquery
和jquery-ui
之间可能存在冲突。我们将bootstrap
置于require bootstrp
的底部,遵循建议。我们还尝试在main app's application.js
中使用$.noConflict()
。但是,这些还不足以让main app's application.js
和bootstrap
一起工作。还需要做些什么才能使jquery
jquery(ui)
与rails engine
合作?谢谢你的帮助。
答案 0 :(得分:1)
首先让我们修复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并且没有太多的日期选择器来修改,我宁愿选择解决方案#1。
答案 1 :(得分:0)
我们发现assets
的{{1}}根本没有加载。这就是为什么所有js功能都不适用于engins。现在是rails engines
:
main app's application.js
以下是提供有关如何为rails引擎加载资产的解决方案的帖子:
Engine's assets with Rails 3.1
为什么添加bootstrap会导致引擎资产消失,我们还不知道。希望有人可以解释问题的原因。