1

私は何時間もこの問題と戦ってきました。なぜ私のコードが機能したのか理解できないようですが、今は機能していません!

私はrequirejsでBackboneとMarionetteを使用してかなり複雑なアプリケーションを構築していますが、これらすべてのライブラリを初めて使用するため、少し混乱します。

エラーが発生します

Uncaught TypeError: Object [object Object] has no method 'apply'

また、コメントアウトしているように見えるコードに関係なく、何が起こったのか、なぜアプリが機能しなくなったのかを理解できないようです。

私を正しい方向に向けるのに役立つものはありますか?

4

1 に答える 1

7

問題を見つけました。私は自分のコードを調べて、冗長性のいくつかを「最適化」していた(そう思った)。

これの代わりに:

define(["backbone"], function( Backbone ){
  var model = Backbone.Model.extend({
        myfunc : function(){ /*do stuff */}
  });

   return model;
});

たくさんのコードを次のように変更しました。

define(["backbone"], function( Backbone ){
     return Backbone.Model.extend({
          myfunc : function(){ /*do stuff*/ }
     });
});

問題ありませんよね?多くの場合。

また、インスタンス化されたモデルを返すことでrequire.jsモジュールからシングルトン機能を取得することについて別の投稿で読んだ気の利いたトリックを使用していました!かっこいい...ほとんど。

私はこれを持っていました:

define(["backbone"], function( Backbone ){
    var singleton = Backbone.Model.extend({
         myfunc : function(){ /*do singleton stuff*/ }
    });

    // because require.js only runs this code once, this essentially creates a singleton!
    return new singleton();
});

そしてそれはうまくいきました!

それから私は生意気になりました...

define(["backbone"], function( Backbone ){
    return new Backbone.Model.extend({
         myfunc : function(){ /*do singleton stuff... no more!*/ }
    })();
});

has no method 'apply'エラーが発生し始めました。

問題を突き止めるのに2日と多くのフラストレーションの大部分を要し、ついにこの投稿から答えを得ました。

新しいBackbone.Model()とBackbone.Model.extend()

Backbone.Modelをインスタンス化する方法をうまく説明していますが、Backbone.Model.extendは、カスタムBackbone.Modelオブジェクトをインスタンス化するために使用できるコンストラクターを提供するだけです。

これが私が今経験した苦痛を誰かに救うことを願っています。

于 2013-01-17T05:13:00.960 に答える