Шаблон проектирования 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"},
]
}
]
Используя эту структуру, вам нужно использовать одну коллекцию. Затем вы можете рассматривать каждый объект в этом как модель, и вы можете отобразить их, используя их отдельные представления в представлении коллекции. Так что здесь нужно использовать вложенные модели