Текстовый плагин RequireJs и шаблоны UnderscoreJs
Хорошо люди,
Я использую текстовый плагин RequireJs для добавления шаблонов подчеркивания (.html) в мое базовое приложение. К сожалению, мой код подчеркивания в моих шаблонах отображается как простой текст.
define(['Backbone', 'text!Templates/BlogIndex.html', 'text!Templates/Elements/Blog/List.html'], function(Backbone, Template, ElementList){
var BlogPostIndexView = Backbone.View.extend({
initialize: function () {
this.template = _.template($(Template).html(), {posts : this.collection});
this.render();
},
render: function (Template) {
this.$el.html(this.template);
return this;
}
});
return BlogPostIndexView;
});
Вот мой код для моего представления, вы можете видеть, что я добавляю два шаблона и устанавливаю их. Однако это становится...
Globall Coach Blog Posts
<% _.each(posts, function(post){ %>
<%= _.escape(post.title) %>
<% }); %>
Кто-нибудь когда-либо имел эту проблему?
2 ответа
Повороты @mu-is-to-short были правильными, текстовый модуль requireJs возвращает необработанный html.
Здесь это `define(['Backbone', 'text!Templates/BlogIndex.html', 'text!Templates/Elements/Blog/List.html'], функция (Backbone, Template, ElementList){
var BlogPostIndexView = Backbone.View.extend({
initialize: function () {
this.template = _.template(Template);
},
render: function (Template) {
this.$el.html(this.template({posts : this.collection.toJSON()}));
return this;
}
});
return BlogPostIndexView;
});
Похоже, вы не правильно используете функцию шаблона подчеркивания. Подчеркивание компилирует строку в функцию, в которую вы можете передавать данные. поэтому ваш код должен выглядеть так:
define(['Backbone', 'text!Templates/BlogIndex.html', 'text!Templates/Elements/Blog/List.html'], function(Backbone, Template, ElementList){
var BlogPostIndexView = Backbone.View.extend({
initialize: function () {
this.template = _.template($(Template).html())({posts : this.collection});
this.render();
},
render: function () {
this.$el.html(this.template);
return this;
}
});
return BlogPostIndexView;
Но я бы реорганизовал это далее, потому что вы обычно хотите динамически повторно выполнить рендеринг с последними данными, поэтому я бы поместил конвейер в данных в шаблон в методе "render" вместо "initialize".
Поэтому желательно, чтобы я сделал это:
define(['Backbone', 'text!Templates/BlogIndex.html', 'text!Templates/Elements/Blog/List.html'], function(Backbone, Template, ElementList){
var BlogPostIndexView = Backbone.View.extend({
initialize: function () {
this.template = _.template($(Template).html())
this.render();
},
render: function () {
this.$el.html(this.template({posts : this.collection}));
return this;
}
});
return BlogPostIndexView;