私はバックボーン、マリオネットをいじっていて、リレーショナル モデルをどのように扱うべきか疑問に思っています。私の主な理由は、同じテンプレートで 2 つの異なる関連モデルのデータを使用できるようにしたいということです。例えば
Thing = Backbone.Model.extend({defaults: {label: null, uri: null}});
Things = Backbone.Collection.extend({model: Thing});
Relationship = Backbone.Model.extend({defaults: {subject: null, predicate: null, object: null}});
Relationships = Backbone.Collection.extend({model: Relationship});
var things = new Things([
new Thing({label: 'Sam', uri: 'AAAA'}),
new Thing({label: 'is friends with', uri: 'BBBB'}),
new Thing({label: 'Violet', uri: 'CCCC'}),
new Thing({label: 'Fred', uri: 'DDDD'})
]);
var relationships = new Relationships([
new Relationship({subject: "AAAA", predicate: "BBBB", object: "CCCC"}),
new Relationship({subject: "AAAA", predicate: "BBBB", object: "DDDD"})
]);
したがって、関係配列は、uri 属性に一致する Things 配列内の項目への参照を保持しているだけです。リレーションシップ テンプレートでやりたいことは、次のようなものです (ドット表記を使用して、関連するモノのモデル データを取得します)。
<script type="text/template" id="relationship-template">
<td><%= subject.label %></td>
<td><%= predicate.label %></td>
<td><%= object.label %></td>
</script>
これを処理する最良の方法はありますか?メモリ内での重複を避けたい。
結果は次のようになります。
サムはバイオレットと友達です
サムはフレッドと友達です
私はバックボーンリレーショナルを見てきましたが、それを機能させる運がありませんでした:(
これは私が試したものです:
Relationship = Backbone.RelationalModel.extend({
relations: [
{
type: Backbone.HasOne,
key: 'subject',
keySource: 'uri',
keyDestination: 'subjectObject',
relatedModel: Thing
}
]
});