Шаблон проектирования Backbone.js для данных JSON

У меня есть вопрос о наилучшей практике при разработке файла JSON, который будет отображаться в Backbone.js. Я знаю, что Backbone полностью агностичен в этой теме, но, возможно, кто-то даст мне хороший совет в этой конкретной ситуации.

В конце концов, мне нужно иметь несколько представлений, которые будут выглядеть так

On 4th of July, in _____ we calebrate ____ day.

___ означает пробел в тексте, где я буду вводить текст или выбирать (зависит от типа), правильность которого будет проверена.

Итак, мне нужен файл JSON, который описывает этот фрагмент текста.

Я думал о чем-то вроде этого

"body": [
            {
                "preInputText": "On 4th of July, in ",
                "postInputText": "",
                "answersID": ["1", "2"]
            },
            {
                "preInputText": "we calebrate ",
                "postInputText": " day",
                "answersID": ["3"]
            }
    ]
"answers": [
            {
                "ID": "1",
                "content": "USA",
                "correct": true
            },
            {
                "ID": "2",
                "content": "Canada",
                "correct": false
            },
            {
                "ID": "3",
                "content": "Independent",
                "correct": true
            }

    ]

или, может быть, проще, но не так плоско

"body": [
            {
                "preInputText": "On 4th of July, in ",
                "postInputText": "",
                "answers": [
                    {
                        "ID": "1",
                        "content": "USA",
                        "correct": true
                    },
                    {
                        "ID": "2",
                        "content": "Canada",
                        "correct": false
                    },
                ]
            }
]
etc…

Итак, первый подход требует создания двух коллекций, передачи их в одно представление и проверки значений между ними. Во-вторых, только одна коллекция моделей, которая содержит как тело, так и ответы, но анализирует их при инициализации и использует вложенную конструкцию.

Я не знаю, является ли это плохой практикой (использовать вложенные модели), но, как я читаю, основа была разработана, чтобы мыслить более плоско.

Может быть, есть какая-то другая логика? Как вы думаете?

Спасибо!

2 ответа

Решение

Я больше отношусь к первому подходу (плоскому подходу) и не согласен с вами в том, что он требует создания двух коллекций.

Вы всегда можете создать одну коллекцию и переопределить ее parse функция, что-то вроде этого:

var MyCollection = Backbone.Collection.extend({
    ...
    parse: function(resp) {
        this.answers = new Backbone.Collection(resp.answers);
        return resp.body;
    }
});

...

// myCollection is an instance of MyCollection
myCollection.models // refer to questions
myCollection.answers // refer to answers
"body": [
            {
                "preInputText": "On 4th of July, in ",
                "postInputText": "",
                "answers" [ {  "ID": "1", "content": "USA", "correct": "true"},
                            {  "ID": "1", "content": "canada", "correct": "false"}
                          ]
            },

            {
                "preInputText": "we calebrate ",
                "postInputText": " day",
                "answersID": [{  "ID": "3", "content": "Independent", "correct": "true"},

                             ]
            }


    ]

Используя эту структуру, вам нужно использовать одну коллекцию. Затем вы можете рассматривать каждый объект в этом как модель, и вы можете отобразить их, используя их отдельные представления в представлении коллекции. Так что здесь нужно использовать вложенные модели

Другие вопросы по тегам