0

假设我尝试在最终的 BackBone 视图中加载两个不同的对象。

我的 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

我可以在这里添加它:

我的 Rails 视图:

#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 回答