3

Backbone-Relationalのドキュメントを理解するのにかなりの時間を費やしています。のようなものを追加する関係が100%明確ではありませんincludeInJSON。おそらく、私が作成しようとしている構造を説明することによって、私の混乱を説明するのが最善でしょう。Venueネストされたモデルが0個以上あるモデルがありますAddress(1:nの関係)。バックエンドストアはMongoDBであり、オブジェクトを埋め込むことができます。この形式で保存したいのですが:

{
    id: 12345,
    label: 'OPUS Cafe Bistro',
    addresses: [
        {
            type: 'mailing',
            address1: '#52 - 650 Duncan Ave',
            city: 'Penticton, BC'
        },
        {
            type: 'main',
            address1: '#106 - 1475 Fairview Rd',
            city: 'Penticton, BC'
        }
    ]
}

(醜いデータ構造は無視してください。簡潔にするために調整しました。)これで、次のような関係を設定したと思いVenueますAddress

var Venue = Backbone.RelationalModel.extend({
    relations: [
        {
            type: Backbone.HasMany,
            key: 'addresses',
            relatedModel: 'Address',
            includeInJSON: false,
            collectionType: 'Addresses',
            reverseRelation: {
                key: 'venue'
            }
        }
});

正しく理解している場合は、をキーにシリアル化されincludeInJSONないようにするためにfalseに設定しますが、reverseRelationでは、 –のプロパティの配列として完全な(会場プロパティなしで)シリアル化するために空白のままにします。私の望み通りに-例えば。正しい?VenuevenueAddressincludeInJSONAddressaddressesVenue

同じように、私は結合スタイルの関係に関して同じ概念を理解しようとしています。VenueorganisationIDフィールドがあると考えてください:

/* venue in JSON format  */
{
    id: 12345,
    organisationID: 336,
    label: 'OPUS Cafe Bistro',
    addresses: []
}

/* and now for the organisation */
{
    id: 336,
    label: 'OPUS Entertainment Group'
}

関係を好むように思われるドキュメントの例を使用すると、次のBackbone.HasManyように設定する必要があると思いますOrganisation

var Organisation = Backbone.RelationalModel.extend({
    relations: [
        {
            type: Backbone:HasMany,
            key: 'venues',
            relatedModel: 'Venue',
            includeInJSON: Backbone.Model.prototype.idAttribute,
            collectionType: 'Venues',
            reverseRelation: {
                key: 'organisationID',
                includeInJSON: false
            }
        }
    ]
});

...上記の例にシリアル化する必要がありますか?(つまり、をVenue取得してに挿入し、Organisationのリストをシリアル化しません)idorganisationIDOrganisationVenues

助けてくれてありがとう-この便利なライブラリを使うのを楽しみにしています。Backbone.js用に自分のリレーショナル接着剤を書こうとして私の目をつぶった後:-)

4

1 に答える 1

4

( https://github.com/PaulUithol/Backbone-relational/issues/37から私の回答をコピーして、より多くの人が見つけられるようにします)

返信が遅くなって申し訳ありませんが、念のため: オプション (collectionTypeや など)は、同じオブジェクト内の にincludeInJSON適用されます。key

したがって、最初の例では、リレーションを次のように記述できます。

var Venue = Backbone.RelationalModel.extend({
    relations: [
        {
            type: Backbone.HasMany,
            key: 'addresses',
            relatedModel: 'Address',
            includeInJSON: true,
            collectionType: 'Addresses',
            reverseRelation: {
                key: 'venue',
                includeInJSON: 'id'
            }
        }
});

これにより、会場が作成されますHasMany addressesaddresses特定の Venueのキーは を使用し、 が に設定されてcollectionType Addressesいるため、完全にシリアル化されます ( のデフォルト値もであるわけではありません。指定しない場合は、またはを完全にシリアル化します)。includeInJSONtrueincludeInJSONtruerelationreverseRelation

は単に同じオプションを取り、任意のアドレスreverseRelationのキーに関してのみ適用します。venueこの場合、venue.idリンク先の会場のプロパティのみをシリアル化します。

于 2011-11-02T10:24:26.103 に答える