Модель в itemview не отображается

У меня проблема с отображением модели в itemview. В настоящее время использую require.js с backbone.marionette.

это мой шаблон заголовка:

// header.js  
define( [
   "jquery",
   "underscore",
   "marionette",
   "user",
   "userSession",
   "text!../../tpl/header_template.html"
   ], function ( $, _, Marionette, User, UserSession, HeaderTemplate ) {

  return Marionette.ItemView.extend( {        
     template: HeaderTemplate,

     initialize: function(){
        alert(UserSession.firstName + " " + UserSession.lastName)
     },

     onRender: function(){
        alert(UserSession.firstName + " " + UserSession.lastName)
     },

     model: new User({
        lastName: UserSession.lastName, 
        firstName: UserSession.firstName
        })
    });
  });

это код фрагмента шаблона

   Logged in as <%= firstName %> <%= lastName %>

и этот код, когда я пытаюсь отобразить элемент просмотра

// attached the view
layout.header.show(new HeaderView()); 

Когда я запускаю этот код, представление отображается нормально, но данные модели (имя и фамилия) неверны. имя и фамилия равны нулю. Странно то, что и при инициализации, и при рендеринге они оба правильно отображают имя и фамилию.

Кто-нибудь знает, как это побороть?


person hrusli    schedule 27.09.2012    source источник


Ответы (1)


Я думаю, вы должны сделать так:

initialize: function(){

    this.model = new User({
        lastName: UserSession.lastName, 
        firstName: UserSession.firstName
    });
}
person Ingro    schedule 27.09.2012
comment
Ух ты! Спасибо! Я часами пытался решить эту проблему, потому что я думал, что модель будет напрямую прикреплена без необходимости неявно устанавливать ее. - person hrusli; 27.09.2012
comment
Вы также можете передать модель в качестве ссылки при создании представления: layout.header.show(new HeaderView(model: UserModel)); - person Ingro; 27.09.2012
comment
хороший улов ингро. между прочим, исходный код дает сбой по той же причине, по которой вы не указываете el: $("#whatever") в представлении: lostechies.com/derickbailey/2011/11/09/ - person Derick Bailey; 28.09.2012