0

最終的な BackBone ビューにロードしようとしている 2 つの異なるオブジェクトがあるとします。

私のRailsコントローラー

def index
  @visuals = Visual.all
  @words   = Word.all

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: [@visuals, @words] }
  end
end

追加できる場所で、ここにあります:

私のレールビュー:

#visuals

:javascript
  $(function() {
    window.router = new AiProject.Routers.VisualsRouter({test_visuals: #{ @visuals.to_json.html_safe } });
    // AiProject.words = new Words(#{@words.to_json});
    //  ^^ Would this be the best place to insantiate my controller code's instance variable?
    Backbone.history.start();
  });

しかし、他の人はそれをあなたのテンプレートに入れるように言います. 私の BackBone のフレームワークがそれをルーターに入れていると思うので、これは奇妙です:

コーヒーBBルーター

show: (id) ->
  visual = @visuals.get(id)

  @view = new AiProject.Views.Visuals.ShowView(model: visual)
  $("#visuals").html(@view.render().el)

だったらそこでインスタンス化してみようかな@words

4

1 に答える 1

3

編集 - これはブートストラップについて話していませんでした。

単一のバックボーン モデルまたはコレクションに直接対応していないため、indexアクションをどこかで、おそらく直接呼び出す必要があります。jQuery.ajax

ajax 呼び出しの成功ハンドラーでは、返されたデータをバックボーンで割り当てたいものに割り当てることができます。

私はおそらく単一のビジュアルと単語のモデルを持ち、次にそれぞれのコレクションも持っているでしょう(現時点ではコーヒースクリプトを使用していないため、生のJavaScriptで):

MyApp.Models.Visual = Backbone.Model.extend();
MyApp.Models.Word = Backbone.Model.extend();

MyApp.Collections.Visuals = Backbone.Collection.extend({
  model: MyApp.Models.Visual
});

MyApp.Collections.Words = Backbone.Collection.extend({
  model: MyApp.Models.Word
});

var visuals, words;

$.ajax({
  url: <path to index action>
  dataType: 'json',
  success: function (data) {
    visuals = new MyApp.Collections.Visuals(data[0]);
    words = new MyApp.Collections.Words(data[1]);
  }
});

この時点で、visualswordsコレクションがあり、必要なことは何でも行うことができます。

于 2012-07-01T18:46:03.780 に答える