Backbone.js: передать модель в подвид по ссылке - PullRequest
1 голос
/ 13 марта 2012

ОБНОВЛЕНИЕ: Как оказалось, у меня был остаток this.model = new MasterModel ();в моих subViews функция initialize ().

Я пытаюсь разделить свой огромный вид на меньшие виды, и поэтому я создал «основной» вид макета, который присоединяет к себе некоторые подпредставления и передает им свою модель.

Однако онКажется, что когда мое подпредставление обновляет модель, эти изменения не отражаются на модели «основного» представления.

Вот что я пытаюсь сделать:

var master = new MasterModel();
var masterView = new MasterView({model:master});

ВнутриФункция masterView initialize () Я делаю так:

function: initialize() {
    this.subView = new subView({model:this.model});
}

И код, который изменяет модель в subView, выглядит так:

function: setCurrency() {
    this.model.set({ currency: this.$('.currency').val() });
}

Может быть, я здесь что-то делаю совершенно неправильно?

Ответы [ 2 ]

0 голосов
/ 30 октября 2012

Сделайте вашу модель глобальной, так что вместо:

var master = new MasterModel();

используйте

window.master = new MasterModel();

, а затем вставьте это в ваши подвиды

function: initialize() {
    this.subView = new subView({model:window.master});
}
0 голосов
/ 13 марта 2012

Сколько вещей класса "валюта" есть на вашей странице?

Я не думаю, что this.$('.currency').val() означает то, что вы думаете, это значит. Я думаю, что вы хотите что-то вроде $(this.el).find('.currency').val() (вы используете 0.9.1? Тогда вы можете сократить это до $el.find('.currency').val()). То, что у вас есть, всегда будет захватывать первый элемент на странице с классом «валюта». this.$ - это просто удобная ссылка на то, что обычно является глобальным объектом Zepto или jQuery. Отсюда и мой вопрос.

Редактировать: в ожидании ответа на уточняющий вопрос.

...