我一直听说很多关于Backbone的信息,并希望在我的最新项目中使用它来学习它。然而,我来自Rails背景,我的经验似乎不能很好地转化为Backbone。
例如,我有四个模型需要在产品视图中显示。
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
我正在使用骨干关系来定义骨干模型中的关系。以下是产品骨干型号。
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'
}
]
在主干路由器中,我执行以下操作。
类 Ibabybox.路由器.产品路由器扩展骨干.路由器
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
首先,我是否朝着正确的方向前进?
其次,感觉有很多东西需要定义和编写来显示产品的相关内容,以及感觉我可能做错了什么的原因......
任何帮助/建议/更正将不胜感激!
谢谢!
根据 Backbone 的说法.js doc 有多种方法可以做到这一点,但随着应用程序的增长,有些方法会变得痛苦。在使用 backbone .js & rails 开发 3 个应用程序后,这是我的经验。
-
骨干.js并不适合每个网站。特别是如果您的网站是基于内容的。在这种情况下,使用 pjax 会给出更好的结果。
-
基于资源的设计是最佳方法。希望铁轨和骨干.js摇滚。您可以轻松使用默认的轨道生成器,只需最少的更改。对于复杂的对象,我更喜欢使用 jbuilder,因为我可以缓存对象。
-
如果你使用的是显式的$.ajax,$.post,$.get,你可能错了。同2]
-
如果你在重复自己,那就有问题了。
-
不要错过骨干活动。在您的情况下,您可以使用事件而不是传递成功回调来获取)