2015-01-15 62 views
2

從骨幹js開始,已經遇到了麻煩。骨幹js this.model.get不是函數

這裏是我的HTML:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <title>Backbone training</title> 
     <script src="jquery-1.11.2.js"></script> 
     <script src="underscore.js"></script> 
     <script src="backbone.js"></script> 
     <style type="text/css"> 
      .rectangle{ 
       position: absolute; 
       border: 4px solid #000000; 
      } 
     </style> 
    </head> 
    <body> 
     <h1>Rectangles</h1> 
     <div id="canvas"></div> 
    </body> 
    <script type="text/javascript" src="rectangles.js"></script> 
</html> 

這裏是rectangles.js文件內容:

(function() { 

    var Rectangle = Backbone.Model.extend({}); 

    var RectangleView = Backbone.View.extend({ 

     tagName: 'div', 
     className: 'rectangle', 
     render: function() { 
      this.setDimensions(); 
      this.setPostion(); 
      return this; 
     }, 

     setDimensions: function() { 
      this.$el.css({ 
       width: this.model.get('width') + 'px', 
       height: this.model.get('height') + 'px' 
      }); 
     }, 

     setPostion: function() { 
      var position = this.model.get('position'); 
      this.$el.css({ 
       left: position.x, 
       top: position.y 
      }); 
     } 

    }); 

    var myRectangle = new Rectangle({ 
     width: 100, 
     height: 60, 
     position: { 
      x: 300, 
      y: 150 
     } 
    }); 

    var myView = new RectangleView({model: 'myRectangle'}); 

    $('div#canvas').append(myView.render().el); 


})(); 

一旦我運行它,我得到這個錯誤:類型錯誤:this.model.get不一個函數 因爲它是教程材料,我認爲它應該沒問題,至少對視頻中的人來說沒問題。我以爲我錯過了一些東西,所以試圖重寫它幾次,沒有運氣。作爲骨幹人員的新手,我不確定我哪裏出了問題?

任何鏈接或建議非常感謝。提前致謝。

回答

2

您需要將模型的實例傳遞到視圖,在這裏:

var myView = new RectangleView({model: 'myRectangle'}); 

應該變成:

var myView = new RectangleView({model: myRectangle}); 

簡單地傳遞的字符串名字是不夠的,骨幹沒有按」不知道你爲new Rectangle分配了什麼變量,或者它應該尋找什麼。

您可能還想修改您的render方法;我認爲傳統的骨幹方式是讓視圖在構建時採用元素(el$el),然後在調用render時渲染到該元素中(而不是生成新元素並返回)。

+1

呃,錯過這樣的細節真的很丟人。感謝您抽出時間對其進行審覈並回復,並非常感謝您的建議! :) –