Backbone についてよく耳にするので、最新のプロジェクトで Backbone を使用して学習したいと考えていました。しかし、私は Rails のバックグラウンドを持っており、私の経験は Backbone にはうまく反映されていないようです。
たとえば、製品ビューに表示する必要がある 4 つのモデルがあります。
class Product < ActiveRecord::Base
belongs_to :category
belongs_to :child
has_many :actions
has_many :comments
end
class Child < ActiveRecord::Base
belongs_to :user
has_many :products
end
Backbone モデルで関係を定義するために Backbone-relational を使用しています。以下は、製品のバックボーン モデルです。
class Ibabybox.Models.Product extends Backbone.RelationalModel
paramRoot: 'product'
urlRoot: '/products'
relations:
[
{
type: Backbone.HasMany
key: 'actions'
relatedModel: 'Ibabybox.Models.Action'
collectionType: 'Ibabybox.Collections.ActionsCollection'
reverseRelation:
key: 'product'
includeInJSON: 'id'
}
]
バックボーン ルーターでは、次のことを行います。
class Ibabybox.Routers.ProductsRouter は Backbone.Router を拡張します
routes:
"": "index"
":id": "show"
show: (id) ->
@product = new Ibabybox.Models.Product({id: id})
@product.fetch
success: (product) ->
actions = product.get('actions')
child = product.get('child')
@child_model = new Ibabybox.Models.Child({id: child.id})
user = @child_model.get('user')
@view = new Ibabybox.Views.Products.ShowView({model: product, actions: actions, child: child, user: user})
$("#products").html(@view.render().el)
Rails コントローラーでは、次のことを行います。
class ProductsController < ApplicationController
def show
@product = Product.find(params[:id])
render json: @product.to_json(:include => [ :actions,
:child => { :include => {:user => {:methods => [:name] }}} ])
end
end
まず、これについて正しい方向に進んでいますか?
第二に、製品に関連するものを表示するために定義して書くこと、および私が何か間違ったことをしているかもしれないと感じる理由がたくさんあるように感じます....
ヘルプ/推奨事項/修正は大歓迎です!
ありがとう!