1

Backbone.js を使い始めたばかりで、ネストされたモデルとコレクションに問題があります。

この例では、エンドポイントは 1 つだけ/vocabulary.jsonです。

返されるもののサンプルを次に示します。

[
{
    "id": 1,
    "words": [
        {
            "native": "hello",
            "foreign": "hola"
        },
        {
            "native": "yes",
            "foreign": "si"
        },
        {
            //... More words in this lesson
        }
    ]
},
{
    //... More lessons coming from this endpoint
}
]

基本的に のコレクションでlessons、それぞれlessonに語彙のコレクションがありますwords

words別のエンドポイントなしでコレクションを作成するにはどうすればよいurlですか (コレクションに必要なようです)。

これが私がこれまでに持っているものです。実際、これは機能を取り除いた基本的なバージョンです。

/entities/vocabulary.js

Entities.Vocabulary = Backbone.Model.extend({});

Entities.Vocabularies = Backbone.Collection.extend({
    model: Entities.Vocabulary,
    url: "/vocabulary.json"
});

// Here is where I am struggling

Entities.Vocabulary.Word = Backbone.Model.extend({
    // what to do?
});

Entities.Vocabulary.Words = Backbone.Collection.extend({
    // what to do?
    // Need some method to go into the Entities.Vocabularies Collection, pluck a given id
    // and return the "words" attribute as a new Collection to work from.
});

おそらく、私はこれについて完全に間違っていると考えていますが、私の問題を十分に説明して、あなたが私を助けてくれることを願っています.

4

1 に答える 1

1

あなたはほとんどそこにいます。モデルでメソッドを使用parseして、単語コレクションを語彙モデルに関連付けるロジックを記述できます。これらの行の何か。

// This would be your main Model
// Set the idAttribute on it
// Use the parse method here which hits before initialize
// where you attach the words collection on each Vocabulary  Model
Entities.Vocabulary = Backbone.Model.extend({
    idAttribute : 'id',
    parse: function (response) {
        // If theresponse has wods in response
        // attach it words collection to the Vocabulary Model
        if (response.words) {
           this.words = new Entities.Vocabulary.Words(response.words || null, {
               parse: true
           });
        }
        // Delete the words object from response as the collection is already 
        // created on the model
        delete response.words;

        return response;
    }
});

// Collection of Vocabulary
Entities.Vocabularies = Backbone.Collection.extend({
    model: Entities.Vocabulary,
    url: "/vocabulary.json"
});

// This would be the model for Word inside a Specific Vocabulory
// Associate a idAttribute if it has one.
// Add a parse method if you have any other extra processing for this model
Entities.Vocabulary.Word = Backbone.Model.extend({

});

// Just a Collection of words for the vocabulory
Entities.Vocabulary.Words = Backbone.Collection.extend({

});


// Pass the object, and pass in the parse: true 
// parameter so that parse is called before initialize
var vocabularies = new Entities.Vocabularies(navi, {
    parse: true
});

// If you want to fetch a new collection again you would just do 

//vocabularies.fetch({parse: true});


console.log(mainCollection);

したがって、各モデルは語彙モデルに直接単語コレクションを持つ必要があります。

フィドルをチェック

于 2013-08-22T19:01:07.983 に答える