2016-07-28 126 views
-1

我正在學習Backbone和JavaScript。我被困在一個錯誤,這個錯誤可能與純JavaScript而不是骨幹相關。骨幹:未捕獲類型錯誤:..不是構造函數

在經歷骨幹教程(不使用requireJS)的同時,我找到了下面的代碼行。

var FirstSubViewModel = Backbone.View.extend({ 
    render: function() { 
    var source = $("#vehicleTemplate").html(); 
    var template = _.template(source); 

    this.$el.html(template(this.model.toJSON())); 
    this.$el.attr("data-color", this.model.get("color")); 

    return this; 
}, 
    }); 

我們可以清楚地看到,代碼returns this。一切正常。

現在我試圖做同樣的在我自己的代碼庫(我用require.JS

我的看法型號:出現錯誤:不工作

define(['backbone'], function(Backbone) { 
    var FirstSubViewModel = Backbone.View.extend({ 
    template: _.template($('#myChart-template').html()), 
    render: function() { 
     $(this.el).html(this.template()); 
     var ctx = $(this.el).find('#lineChart')[0]; 
     return this; 
}, 
    initialize: function() { 
     this.render(); 
    } 
    }); 
}); 

我的控制器:

define(['backbone', 'FirstSubViewModel'], function(Backbone, FirstSubViewModel) 
{ var ch = new dashboardModel.chart({}); 
     new FirstSubViewModel({ 
       ^^ HERE I GET ERROR 
     el: '#chartAnchor1', 
      model: ch 
     }); 
}); 

我的看法型號:工作完全正常

define(['backbone'], function(Backbone) { 
     var FirstSubViewModel = Backbone.View.extend({ 
     template: _.template($('#myChart-template').html()), 
     render: function() { 
      $(this.el).html(this.template()); 
      var ctx = $(this.el).find('#lineChart')[0]; 
      // return this; Commented Out!** 
    }, 
     initialize: function() { 
      this.render(); 
     } 
     }); 
return FirstSubViewModel; 
    }); 

問題:如果我在底部使用return FirstSubViewModel而不是在渲染函數中返回this,那麼一切正常。但我想在render function中嘗試return this,並希望一切都能正常工作。最後我不想做return FirstSubViewModel

FirstSubViewModel是不是構造

+0

我已經改變了代碼示例。發佈問題時,我調整了教程代碼。我已經把實際的教程代碼。我對這種混亂表示歉意。而且你所說的代碼非常糟糕,是我編寫的實際代碼。而給出的代碼只是片段。我曾認爲這足以解決問題。 – Unbreakable

+0

所以基本上在教程中,導師在渲染功能中使用「返回這個」。但是我需要返回代碼底部的全部類。我正在學習所有這些東西,所以我可能不會採取最佳做法。請引導我爲什麼問題即將到來。 – Unbreakable

+0

我也想在渲染函數中使用「return this」,但我得到錯誤。但是當我在代碼片段的底部返回整個類時,一切正常。 – Unbreakable

回答

2

最後返回定義了將被包括在其他模塊在這種情況下是必需的:使用「返回此」在渲染功能時

錯誤。沒有這個模塊,返回undefined

讓我們試着在控制檯:

x = undefined 
new x() 

TypeError: x is not a constructor

return FirstSubViewModel是強制性的。建議使用渲染功能中的return this

代碼:

define(['backbone'], function (Backbone) { 
    var FirstSubViewModel = Backbone.View.extend({ 
     template: _.template($('#myChart-template').html()), 
     render: function() { 
      console.log("inside first sub view render"); 
      $(this.el).html(this.template()); 
      var ctx = $(this.el).find('#lineChart')[0]; 
      return this; 

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

    return FirstSubViewModel; // Works as expected. 
}); 
+0

謝謝你的回覆。你沒有正確的問題。我編輯了我的問題。你能否看到它一次。非常感謝! – Unbreakable

+0

我修復了答案 –

+0

所以我需要兩者都有。渲染函數中的「return this」和底部的「返回FirstSubVIewModel」?目前,我只是「返回FirstSubVIewModel」,仍然一切正常。請指導我。 – Unbreakable