2013-04-26 3 views
0

это, как я делаю это в настоящее время, но то, что я хочу сделать, это визуализировать данные из шаблона, не делая это (serialized_model.items [0]):Как я могу визуализировать данные шаблона без сериализации модели?

template: function(serialized_model){ 
     var user_data_tmpl = $("#user-data-template").html(); 
     var template = Handlebars.compile(user_data_tmpl); 
     return template(serialized_model.items[0]); 
    } 

Я получаю результаты прекрасных из трудного времени но это полный код:

Модель & Коллекция:

window.UserData = {}; 

UserData.Model = Backbone.Model.extend(); 

UserData.Collection = Backbone.Collection.extend({ 

    model:UserData.Model, 

    url: '/getUserData', 

    parse: function(response) { 
     return response.data; 
    } 

}); 

Взгляд:

UserData.View = Backbone.Marionette.ItemView.extend({ 

    template: function(serialized_model){ 

     var user_data_tmpl = $("#user-data-template").html(); 
     var template = Handlebars.compile(user_data_tmpl); 
     return template(serialized_model.items[0]); 
    } 

}); 

Шаблон:

<script id='user-data-template' type='text/x-handlebars-template'> 
    <a href="#" id="logout"> Logout </a> 
    uid:{{uid}} username:{{username}} clave:{{clave}} 
</script> 

JSON:

{"success":true,"data":{"logged":true,"uid":14,"clave":14,"depto":9,"nivel":5},"report":null} 
+0

«Что я хочу сделать, это визуализировать данные из шаблона, не делая этого» ... не делая что? Использование шаблонов? Используя модели для питания этих шаблонов? Извлечение данных из модели? Я не уверен, в чем ваш вопрос ... если вы собираетесь использовать шаблоны и хотите заполнить значения в этих шаблонах данными из ваших моделей, то в какой-то момент вам нужно получить данные модели (например, через 'toJSON'), поскольку Handlebars не использует исходные модели базовой модели. – machineghost

+0

@machineghost Извините, что я отредактировал контент, чего хочу достичь, - это автоматически скомпилировать данные из шаблона, не выполняя все действия внутри шаблона funcion, ранее я использовал это в одной строке: template: Handlebars.compile ($ ('# user-data-template'). html()), – Uuid

+0

Теперь я понимаю (я думаю); см. мой ответ ниже. – machineghost

ответ

1

Как мы уже обработано это в нашем коде просто иметь BaseView класс, что все наши представления проходят от. Эта точка зрения имеет метод renderTemplate и некоторые вспомогательные методы, которые выглядят примерно так:

renderTemplate: function() { 
    this.$el.html(this.templatedHtml()); 
    return this; 
}, 
templatedHtml: function() { 
    return this.template(this.getTemplateData()); 
}, 
getTemplateData: function() { 
    return _({}).extend(this.model.toJSON()); 
} 

Наша является немного более сложным, чем это, но, надеюсь, вы поняли идею. Дело в том, что если вы строите себе метод renderTemplate на BaseView класса, то вы можете сделать новые взгляды ...

var YourView = BaseView.extend({ 
    template: yourCompiledTemplate 
}); 

var yourViewInstance = new YourView({model: someModel}); 
// Apply template to yourViewInstance: 
yourViewInstance.renderTemplate(); 

Таким образом:

  • все происходит автоматически
  • вы не» t нужно что-то повторить
  • , если вы хотите добавить еще (например, вы хотите определить шаблоны в виде строк или вы хотите определить их в тегах сценариев и вместо этого указать идентификатор этих тегов и иметь свое представление скомпилировать это в t o шаблоны Handlebars для вас), это супер-легко добавить
Смежные вопросы