假设我有两个不同的对象,我试图在最终的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
进行身份验证?
答案 0 :(得分:3)
编辑 - 这不是谈论自举。
您需要在某处调用index
操作,可能直接通过jQuery.ajax
调用,因为它不直接与单个主干模型或集合对应。
在ajax调用的成功处理程序中,您可以将返回的数据分配给您希望在骨干网中分配的任何内容。
我可能会有单个视觉效果和单词的模型,然后是每个的集合(在原始javascript中,因为我现在没有使用coffeescript练习):
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]);
}
});
此时,您拥有visuals
和words
个集合,可以随心所欲地执行任何操作。