骨干js rigth初始化过程

时间:2015-10-01 15:34:32

标签: javascript backbone.js

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?

2 个答案:

答案 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({
      ...

不要考虑这样的问题。但我认为可以找到更好的解决方案