2016-07-28 10 views
-1

私はバックボーンとJavaScriptを学んでいます。私は1つのエラーで立ち往生しており、このエラーは純粋な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をレンダリング機能で返すのではなく、下部に使用するとすべて正常に機能します。しかし、私はreturn thisrender functionで試してみたいと思っています。私は最終的にreturn FirstSubViewModelをしたいとは思わない。使用するときに、レンダリング機能に「これを返す」

エラー:

FirstSubViewModel

+0

私は、サンプルコードを変更しました。私は質問を掲示しながらチュートリアルのコードを微調整しました。私は今実際のチュートリアルコードを入れました。混乱のために私の謝罪。あなたが言っているコードは、私が書いた実際のコードです。与えられたコードは単なるスニペットです。私はこれが問題を解決するのに十分だと思っていました。 – Unbreakable

+0

基本的にチュートリアルでは、チュートリアルではレンダリング機能で「これを返す」を使用しています。しかし、コード全体のクラスをコードの最後に戻す必要があります。私はこのことをすべて学んでいるので、ベストプラクティスをしていないかもしれません。問題がなぜ起こっているかを親切に教えてください。 – Unbreakable

+0

私はまた、私のレンダリング機能で "これを返す"を使用したいと思いますが、エラーが発生します。しかし、コードスニペットの最後にクラス全体を返すと、すべて正常に動作します。 – 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 FirstSubVIewModel」?現在、私は "Return FirstSubVIewModel"を持っていますが、それでもすべてが機能します。私を案内してください。 – Unbreakable

関連する問題