2012-06-26 60 views
2

我正在嘗試設置Backbone應用程序。下面這段代碼給予以下錯誤:Backbone this.el jQuery

Uncaught TypeError: Object # has no method 'append'

define(
    [ 
     'jQuery', 
     'Underscore', 
     'Backbone', 
     'text!templates/start.html' 
    ], 

    function ($, _, Backbone, startTemplate) 
    { 
     var StartView = Backbone.View.extend({ 

      // properties 
      el: $('#container'), 

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

      render: function() 
      { 
       var template = _.template(startTemplate); 
       this.el.append(template); 
      } 
     }); 

     return new StartView; 
    } 

); 

但這個工作(見 'render'功能):

define(
    [ 
     'jQuery', 
     'Underscore', 
     'Backbone', 
     'text!templates/start.html' 
    ], 

    function ($, _, Backbone, startTemplate) 
    { 
     var StartView = Backbone.View.extend({ 

      // properties 
      el: $('#container'), 

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

      render: function() 
      { 
       var template = _.template(startTemplate); 
       $(this.el).append(template); 
      } 
     }); 

     return new StartView; 
    } 

); 

我傳遞$(' #集裝箱')作爲'el'屬性,所以我認爲這應該工作得很好。爲什麼我必須爲這個例子再次使用jQuery符號。 $(this.el)而不是this.el

很多很多很多預先感謝!

回答

13

骨幹,您只需提供身份證或類名el

el: '#container' 

然後,this.el引用的DOM元素,(如果你使用的是最新骨幹),this.$el引用jQuery對象。

如果你的主幹是最新的,$(this.el)是沒有必要的

+3

通過硬編碼的ID使代碼demonstrably少重複使用實際上提供的視圖本身的DOM節點。如果你將它傳遞給你的視圖構造器(控制反轉)並且幫助你爲你的代碼編寫測試,Backbone自動爲你設置'this.el',因爲你可以使用HTML元素而不是DOM節點。 'var myView = new MyView({el:'#container'}); //會產生同樣的影響' – phawk