1

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.ProductsRou​​ter は 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

まず、これについて正しい方向に進んでいますか?

第二に、製品に関連するものを表示するために定義して書くこと、および私が何か間違ったことをしているかもしれないと感じる理由がたくさんあるように感じます....

ヘルプ/推奨事項/修正は大歓迎です!

ありがとう!

4

1 に答える 1

1

backbone.js doc There's More Than One Way To Do Itによると、アプリケーションが成長するにつれていくつかの方法が苦痛になります。backbone.js と rails を使用して 3 つのアプリケーションを開発した後、ここに私の経験があります。

  1. backbone.js はすべての Web サイトに適しているわけではありません。特にあなたのウェブサイトがコンテンツベースの場合。この場合、pjax を使用するとより良い結果が得られます。

  2. リソースベースの設計が最善のアプローチです。そしてうまくいけば、rails と backbone.js の両方がうまくいきます。最小限の変更で、デフォルトの Rails ジェネレーターを簡単に使用できます。複雑なオブジェクトの場合、オブジェクトをキャッシュできるため、 jbuilderを使用することを好みます。

  3. 明示的な $.ajax,$.post,$.get を使用している場合は、おそらく間違っています。[2 と同じ]

  4. 繰り返している場合は、何か問題があります。

  5. バックボーンイベントを見逃さないでください。(あなたの場合、成功コールバックを渡してフェッチする代わりにイベントを使用できます)

于 2012-12-13T08:14:39.067 に答える