此javascript
出现在所有网站页面上。
var CategoriesView = Backbone.View.extend({
el: $('.js-categories-view'),
initialize: function () {
...
}
...
templates: {
'category-template': _.template($('#js-category-template').html())
},
});
如果页面没有元素$('.js-categories-view')
,则代码如:new CategoriesView();
将不会被调用,初始化也不会被调用。
但是模板部分呢?
_.template($('#js-category-template').html())
总是被调用,我收到错误:
Uncaught TypeError: Cannot read property 'length' of undefined
由于$('#js-category-template')
在页面上没有显示,并且我不希望在不需要此视图的页面上存储模板html?
答案 0 :(得分:0)
您可以检查当前页面上是否存在所需元素:
if( $('.js-categories-view').length ){
new CategoriesView();
}
如果要在调用_.template()
函数时防止出错,还需要将templates
对象的定义移动到视图的initialize
方法中,如下所示:< / p>
var CategoriesView = Backbone.View.extend({
el: $('.js-categories-view'),
initialize: function () {
this.templates = {
'category-template': _.template($('#js-category-template').html())
};
...
}
});
答案 1 :(得分:0)
谢谢大家!这是一个很好的解决方案。但最终我实现了这个:
$(function () {
if (!$('.js-categories-view').length) {
return;
}
var CategoriesPageModel = Backbone.Model.extend({
...
不要考虑这样的问题。但我认为可以找到更好的解决方案