2

だからここに私のポイントがあります、私はいくつかのチュートリアルに従い、最後にhttp://8raystech.com/2011/11/28/how-to-create-embeddable-widgets-with-railsからすべてのリファレンスを読んでみました

Ruby on Railsを初めて使用するので、明らかにどこかで犯した小さな間違いを探すのに2日近く費やしました。Chromeで要素を検査すると、次のエラーが表示されるため、ルートエラーの可能性があると思います。 編集:

"GET http://localhost:3000/widget 500 (Internal Server Error)"

私は必死にそれで多くのことを試みました、しかしここに私の現在のコードがあります:

私のウィジェットコントローラーは次のようになります:(widget_controller.rb)

class WidgetController < ApplicationController
    def show
        @content = render_to_string(:partial => 'widget/embed', :layout => false)
    end
end

javascript(show.erb.html)を使用した私の見解

(function() {
    document.write(<%= @content.to_json %>)
})()

パーシャルは私が思うにそれほど重要ではありませんが、ここに例があります:(_embed.erb.html)

<style>...</style>
<div class="widget-communication">
    <div>Bla bla bla</div>
    ...
</div>

そして最後に、routes.rbで

...
match 'widget', to: 'widget#show'
...

そこで、ローカルでテストして、これを使用してウィジェットをロードしました。

<script src="http://localhost:3000/widget" type="text/javascript"></script>
4

3 に答える 3

2

ウィジェットはわかりませんが、JS としてではなく HTML として部分的にレンダリングしたいようです。値のコンテンツに文字列を割り当てているだけで、デフォルトのレンダリング アクションを使用したいと考えています。.erb ではなく .js ファイル拡張子 (show.js.erb) を使用するようにしてください。

コントローラーでは、コレクションを返す必要があります。つまり、次のようになります。

class WidgetController < ApplicationController
  respond_to :js, only: :show

  def show
    @user = User.find params[:id]
  end
end

そしてビュー(show.js.html)で:

document.write("<%= escape_javascript(render(:partial => 'widget/embed', :locals => {:user => @user})).html_safe) %>");

の使用はお勧めしませんがrespond_to :js。デバッグが非常に難しく、かなり遅く、html と js ロジックが混在しています。

于 2012-10-15T16:14:52.233 に答える
2

わかりましたので、これを行う別の方法があります.JQueryとJson....

したがって、ユーザーコントローラーなどのコントローラーを直接使用するか、ウィジェットに入れたい情報、私の例では会社に関する情報を使用してください。

したがって、コントローラーに次のようなメソッド ウィジェットを追加します。

def widget
    @company = Company.find(params[:id])
    @logo_url = @company.logo_url(:mini)
    respond_to do |format|
      format.json { render :json => {:company => @company, :url => @logo_url}, :callback => params[:jsoncallback] }
    end
  end

routes.rb には、次のようなものが必要です。

resources :public_company_profiles do
    get :widget, on: :member
  end

次に、サードパーティの Web サイトが使用する JSON 情報から HTML コードを作成する JQuery パーツ: 最初に jquery を追加するスクリプト、次に実際の jquery リクエスト。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script>
$.getJSON("http://www.yourwebsite.com/yourcontroller/ID/widget?jsoncallback=?",
    function(data) {   
    var logo_url = "http://www.yourwebsite.com" + data.url;
    $("#logo img").attr('src',logo_url);
    $("#logo img").attr('alt',data.company.name);
    $("#name").html(data.company.name);
    $("#desc").html(data.company.description);
  });
</script>

その後、赤ちゃんが動作します!(ここの jQuery ドキュメントの周りに と を配置することを忘れないでください: api.jquery.com/html)

于 2012-10-16T08:45:01.407 に答える
0

なぜrender_to_stringを使用しているのですか?プレーンレンダリングを試しましたか?

また、GET呼び出しでURLの末尾に.jsonを追加してみてください。

于 2012-10-15T15:59:42.500 に答える