0

私はバックボーン、マリオネットをいじっていて、リレーショナル モデルをどのように扱うべきか疑問に思っています。私の主な理由は、同じテンプレートで 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
        }
    ]
});
4

1 に答える 1

0

あ~分かった~

キーにあるものは何でもマップする ID フィールドを探しているので、uri の名前を id に変更しました。すべて問題ありません。残念ながら、どのフィールドにマップするかを明示的に伝えることはできません。

于 2012-10-07T00:59:07.963 に答える