Как в Backbone изменять модель в подвью?
Всем привет. Как правильно работать с моделью когда во вью есть подвьюхи. Вот что я имею ввиду:
У меня компонент, пускай это будет какой-то абстрактная голосовалка. Она состоит из счетчика и формы для комментария. Вот условная картинка: ![]() Я хочу вынести форму в отдельную вью.
var VoteForm = Backbone.View.extend({
});
var Vote = Backbone.View.extend({
initialize: function () {
this.form = new VoteForm();
}
});
В модели голосовалки есть два поля count и comment
var VoteModel = Backbone.Model.extend({
defaults: {
count: 0,
comment: ''
}
});
Далее, я хочу, что бы при сабмите формы изменялась модель. Т.е. в comment попало то, что введено в форму. Вопрос в том как мне взаимодействовать с моделью. У меня есть только два варианта. Первый это передавать модель в подвью.
var VoteForm = Backbone.View.extend({
events: {
'submit': function () {
this.model.save({comment: this.commentValue}) // this.commentValue - это то что введено в форму
}
}
});
var Vote = Backbone.View.extend({
initialize: function () {
this.form = new VoteForm({
model: this.model
});
}
});
var vote = new Vote({
model: new VoteModel
});
Второй это подписываться на события подвью и в колбэке изменять модель
var VoteForm = Backbone.View.extend({
events: {
'submit': function () {
this.trigger('submit', {comment: this.commentValue}) // this.commentValue - это то что введено в форму
}
}
});
var Vote = Backbone.View.extend({
initialize: function () {
this.form = new VoteForm();
this.form.on('submit', function (data) {
this.model.save({
comment. data.comment
})
});
}
});
var vote = new Vote({
model: new VoteModel
});
Интересует не то как работать с подвьюхами, а именно работа с моделью! Является ли хоть один из вариантов верным? Если да/нет то почему? И как бы сделали вы? |
Я создал один общий вид
и в нем инициализировал бы вид формы и вид вывода данных к примеру Всем бы бал одну модель и следил бы за ее изменениями к примеру Я вот смотрю вы в initialize объявляете вид я так понимаю вы его потом хотите вывести. так вот в initialize вывести не получится так как дом не сформирован, вывод надо делать после рендеринга. Если ваш блок будет выглядеть как на картинке и больше ничего, то можно все сделать в одном виде и форму и все остальное. |
| Часовой пояс GMT +3, время: 17:46. |