在观看Ryan Bates Railscast之后尝试选择Backbone并且我不确定如何从我的Rails控制器传递多个实例变量并在我的Backbone视图中渲染它们。任何帮助将不胜感激。我试过像:
respond_with({ photos: @photos, feature: @feature, only: @categories })
但我不确定如何在Backbone视图中传递它们。
class PhotosController < ApplicationController
respond_to :html, :json
def index
photo = Five00px::Photo.new("jfvYEpvJLv06t0blEKNPuJyU3vjqQP6vnXh6KX3O")
options = {
consumer_key: photo.consumer.key,
feature: params["feature"] ? params["feature"] : "popular",
image_size: 2 }
@photos = photo.photo_stream(options).photos
@feature = photo.stream_feature
@categories = photo.stream_categories
respond_with @photos
end
end
路由器:
class Five00.Routers.Photos extends Backbone.Router
routes:
"" : "index"
initialize: ->
@collection = new Five00.Collections.Photos()
@collection.fetch()
index: ->
photo_view = new Five00.Views.PhotosIndex(collection: @collection)
$("#photos").html(photo_view.render().el)
查看:
class Five00.Views.PhotosIndex extends Backbone.View
template: JST['photos/index']
initialize: ->
@collection.on("sync", @render, this)
render: ->
$(@el).html(@template(photos: @collection))
this
答案 0 :(得分:0)
我认为您误解了您可能期望Backbone应用程序如何工作。如果考虑在索引操作中创建的实例变量,那些通常用作视图中的可访问对象。对于Backbone应用程序,一旦呈现视图,您将只能访问呈现视图时的数据。类似的东西:
<script><%= "window.categories = JSON.parse(#{@categories.to_json});" %></script>
一种方法是让您的照片模型在您进行查询时包含其他关系:
Photo.includes(:categories)
并指定您希望序列化照片的方式:https://github.com/rails-api/active_model_serializers因为您想要的是骨干集合从浏览器提取到资源,也就是使用Photo #index动作中的JSON响应。
或者最后,通过Backbone完全处理这个问题,并为每个资源创建三个单独的请求,并通过模型和集合类在前端组装关系。您可以手动设置这些关系,也可以使用扩展主干库来执行此操作,以获取您可能会看到http://backbonerelational.org/的想法。