1

rails 3.2.12複数の を持つアプリに取り組んでいますrails engines。にはナビゲーションバーとユーザーメニューがありますmain app。機能モジュールは rails にありますengine。そのうちの 1 つは、engine顧客customerxの作成、顧客情報の変更など、ユーザーが顧客情報を管理できるようにするものです。

先週bootstrap、bootstrap の優れた形式を利用するために rails_main アプリを追加しました。私たちが見つけた問題は、jquerydatepickerと html の挿入機能が Rails エンジンで動作しなくなることです。

は次のmain app's application.jsとおりです。

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

application.jsにrequire bootstrapがあります。

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

またdatepickerenginesメインアプリにブートストラップを追加した後、まったく機能しなくなりました。

オンラインで検索を行いました。bootstrap働く必要がありjqueryます。ただし、 と の間で競合が発生する可能性がありjquery-uiますbootstraprequire bootstrpの一番下に を配置することで、アドバイスに従いますmain app's application.js。にも使ってみ$.noConflict()ましたmain app's application.jsbootstrapしかし、それらは一緒に作ったりjquery作業したりするのに十分ではありません。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

これら 2 つのライブラリの間には競合があります。そのまま併用することはできません。

状況に応じて、私が知っている2つの解決策を次に示します。

  1. jQuery UI をまったくあきらめて、Bootstrap のデータピッカーを使用します。それもいいです。
  2. jQuery UI Bootstrapなど、これら 2 つを含む微調整された lib を使用するか、この lib に対応する Rails gemを使用します。

Bootstrapに固執し、修正する日付ピッカーがあまりない場合は、解決策#1をお勧めします。

于 2013-05-11T15:14:01.473 に答える
0

私たちが発見したのは、assetsforrails 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 に答える