2012-03-13 1 views
1

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

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

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

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

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

Внутри MasterView инициализации() функцию я делаю это:

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

И код, который изменяет модель в подвид заключается в следующем:

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

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

+0

Я не вижу ничего плохого с кодом так далеко. Вы уверены, что модель не обновляется? Или это может быть проблемой, когда обновления не отражаются в представлении? – JayC

+0

В моделях есть события, которые вы можете привязать к «изменению», чтобы обновить представление. Могу ли я посмотреть привязку события к модели и что она делает, когда она обновляется? – websymphony

+0

@JayC: Да, я уверен. У меня есть кнопка в главном представлении с предупреждением (JSON.stringify (this.model.toJSON())), прикрепленным к событию клика. Когда я нажимаю кнопку, хэш-код JSON не содержит изменений, которые я сделал в под-представлениях. – ragulka

ответ

0

Сколько предметов имеет «валюта» на вашей странице?

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

Редактировать: ожидается ответ на вопрос о разъяснении.

+0

Я это знаю. Это не проблема. Когда я проверяю значения модели в SubView после того, как я их установил в subView, они изменились, как я ожидаю. Однако, когда я проверяю значения модели в masterView, они не изменяются. – ragulka

+0

Хорошо, хорошо, так ... мы имеем дело с двумя моделями здесь или с одним? Потому что это невозможно с одной моделью, которая меня сбивает с толку.В соответствии с вашим объяснением в вопросе выше, это должен быть один экземпляр модели, на который каждый взгляд ссылается, но то, что вы здесь описываете, конечно, не действует как экземпляр одной модели. – JayC

+0

Извините, так как оказалось, у меня был this.model = new.MasterModel(); в моей функции subView initialize(). Sooooo глупо ... – ragulka

-1

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

var master = new MasterModel(); 

использования

window.master = new MasterModel(); 

, а затем па это своим подпанели

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

 Смежные вопросы

  • Нет связанных вопросов^_^