2014-01-21 3 views
0

Я практикую использование внешних шаблонов в Backbone js, и я получил этот TypeError, где говорится, что объект не имеет template.Backbone js Отсутствует метод 'template'

Также как маршрутизатор распознает/вызывает просмотр, если он находится на другом пути и наоборот?

Я включил коды, которые я работаю:

profile.js

window.ProfileView = Backbone.View.extend({ 

initialize: function() { 
    this.render(); 
}, 

render: function() { 
    $(this.el).html(this.template()); 
    return this; 
} 
}); 

main.js

var AppRouter = Backbone.Router.extend({ 
    routes: { 
     'profile' : 'profile' 
    }, 
    profile: function() { 
     this.profileView = new ProfileView(); 
     $('#global-content').html(this.profileView.el); 
    } 
}); 


utils.loadTpl (['profile'], function() { 
    appRouter = new AppRouter(); 
    Backbone.history.start(); 

}); 

utils.js

window.utils = { 
loadTpl: function(views, callback) { 

    var deferreds = []; 

    $.each(views, function(index, view) { 
     if (window[view]) { 
      deferreds.push($.get('templates/' + view + '.html', function(data) { 
       window[view].prototype.template = _.template(data); 
      })); 
     } else { 
      // alert(view + " not found"); 
     } 
    }); 

    $.when.apply(null, deferreds).done(callback); 
} 
}; 

ответ

1

Шаблон не является функцией, вам нужно позвонить как свойство вида, поэтому вы должны удалить ()

, например.

$(this.el).html(this.template); 
+0

правильно, он избавился от ошибки, но шаблон по-прежнему не отображается – OneScrewLoose

+1

Как вы настройки шаблона, это не очевидно в коде, который вы. Обычно я использую require.js для извлечения ресурса, затем я специально устанавливаю шаблон, например. 'template: template,' в самом представлении –

+0

было указано в utils.js. Я намеренно не использовал require.js со ссылкой на [this] (https://github.com/ccoenraets/nodecellar/tree/master/public) – OneScrewLoose

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