2015-08-05 2 views
0

Я использую Browserify для загрузки Backbone View. Представление представляет собой некоторые html-шаблоны с подчеркиванием. Метод «tmpl2» генерирует пустую строку, когда я загружаю разметку шаблона из сценария шаблона html. Существуют ли какие-либо проблемы между браузером и подчеркиванием или почему его отображение пустой строки? (Я использую последнюю версию browserify, подчеркивание, магистральная, JQuery)Пустой шаблон подчеркивания в обозревателе

View.js:

var $ = require('jquery'); 
var Backbone = require('backbone'); 
var _ = require('underscore'); 
Backbone.$ = $; 

var View = Backbone.View.extend({ 

    tmpl1: _.template("<p>hello: <%= name %></p>"),  //HTML hardcoded 
    tmpl2: _.template($.trim($('#tmpl').html())),  //HTML from template 

    render: function(){ 
     console.log($.trim($('#tmpl').html())); //<p>hello: <%= name %></p> <-- OK 
     console.log(this.tmpl1({name : 'moe'}));  //<p>hello: moe</p>   <-- OK 
     console.log(this.tmpl2({name : 'moe'}));  //(Emptystring)    <-- WTF ??? 
    } 

}); 

module.exports = View; 

index.html:

<script type="text/template" id="tmpl"> 
    <p>hello: <%= name %></p> 
</script> 
+1

Вы уверены, что DOM загружен в том месте, где вы компилируете свой шаблон? – Jack

+0

Да, dom уже загружен, скрипт для загрузки и рендеринга этого базового представления находится внутри метода jquery ready «$ (function() {})». – htmlcoder

+0

Является ли это кодом для создания экземпляра представления или объявления его? Я подозреваю, что это позже, и это проблема. – Jack

ответ

0

Ваш вопрос, скорее всего, что в точке, где ваш компилятор вашего шаблона DOM не загружен. Хотя ваша функция рендеринга, по-видимому, не вызывается до тех пор, пока она не станет причиной того, что вы сможете регистрировать шаблон.

Когда вы объявляете базовый вид, операторы, которые присваивают значение его прототипу, выполняются сразу же.

Например, в вашем случае следующая строка выполняется сразу

tmpl2: _.template($.trim($('#tmpl').html())),  //HTML from template 

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

Например

initialize: function() { 
    this.tmpl1 = _.template("<p>hello: <%= name %></p>"); //HTML hardcoded 
    this.tmpl2 = _.template($.trim($('#tmpl').html())); 
} 

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