本当に良いケースがない限り、ネストされたURLは作成しません。各リソースは、リソース名とIDで定義できます。オブジェクト間の関係は内部的です。
http://foo.com/a/:id.json
http://foo.com/b/:id.json
http://foo.com/c/:id.json
ネストされたオブジェクトを引き出すためにサーバーにヒットしたと言われているのは、本当に理想的ではありません。あなたは、より良い、私は戻って私のサーバーから取得したデータは、サブノードが個人を取るカスタムコントローラによって組み立てられている
{
"id": 372,
"context": "office_work",
"date_of_entry": "2011-7-05 15:22:00",
"blood_glucose_measurement": 98,
"food": {
"exchanges": "98",
"list": "burger fries"
},
"exercise": {
"duration": "28",
"list": "running shopping"
}
}
ようになりますたとえば、ネストされたJSONを返す単一のリソース
http://foo.com/a/:id.json
を持っていますdbレコードを作成し、データツリーを作成します。
backbone.jsは本質的にフラットな構造だけをサポートしているので、今は困っています。私は基本的なBackbone.Modelをいくつか変更して、ツリーのような構造をサポートするようにしました。
もしあなたが役に立つのであれば、ここに貼り付けます。
:
#= require jquery
#= require underscore
#= require backbone
#
class RailsModel extends Backbone.Model
initialize: (attributes) ->
data = {}
for k,v of @attributes
if v.constructor.name == "Object"
data[k] = new RailsModel(v)
@set data, {silent: true}
get: (field)->
val = @
first = true
for p in field.split('/')
if first
val = super(p)
else
# This allows returning *undefined* rather
# than an exception if the parent of a deeply
# nested node does not exist.
val = if val? then val.get(p) else undefined
first = false
val
# Allow heirarchical setting of objects
#
# Example
#
# model.set_field('root/child', 10)
#
# Will create the path if it does not exist
set_field: (field, value, silent=false)->
path = field.split('/')
node = undefined
val = @
for p in field.split('/')
node = val
val = node.get(p)
if not val?
data = {}
val = new RailsModel
data[p] = val
node.set data
data = {}
data[p] = value
node.set data
if not silent and /\//.test(field)
@trigger("change:#{field}", @model, value)
@trigger("change", @model)
window.RailsModel = RailsModel
あなたは最後の行は、イベント "運動し/期間の変更" をトリガーする
model = new RailsModel
model.url = "/data"
model.fetch()
model.get('excercise/duration')
model.set_field('excercise/duration', 25)
のようにそれを使用することができます