8

私はバックボーンアプリの構築に精通していますが、requirejsを使用するように変換しようとしています。私が直面している問題は、親ビューを拡張しようとしているときです。undefined

base-view.jsをproperties-view.jsに拡張しようとしたとき

 define(['backbone','underscore','jquery','views/node/base-view'],                  
   function(Backbone, _, $, NodeBaseView){
     PropertiesView = NodeBaseView.extend({

        });
     }
});

親ベースビュー内での子ビューのインスタンス化

    define(['backbone','underscore','jquery','views/node/properites-view'], function(Backbone, _, $, PropertiesView){
    NodeBaseView = Backbone.View.extend({
    ..
        new PropertiesView({});
    ..
    });

});

ここで、NodeBaseViewはundefined、PropertiesView用に拡張しようとしているときです。ヘルプはありますか?

注:ここからAMDバージョンのバックボーンとアンダースコアを使用していますhttps://github.com/amdjs

4

3 に答える 3

3

この定義が「views/main」にあるとしましょう

define(['backbone', 'views/node/base'],                          
    function(Backbone, BaseView){
        var MainView = BaseView.extend({

        });

        return MainView;
    }
);

次に、あなたの子供のビューとして:

define(['backbone', 'views/node/base'],                          
    function(Backbone, BaseView) {
        var PropertiesView = BaseView.extend({

        });

        return PropertiesView;
    }
);

それから遠く離れた宇宙の別の場所:

myView = new MainView();

マニュアルの例を使用:

define(['backbone', 'views/node/base'],                          
    function(Backbone, BaseView){
        var MainView = BaseView.extend({

        });

        return MainView;
    }
);

それで

define(['backbone'], function (Backbone) {                  
  var BaseView;

  require(['views/node/base'], function(b){
      BaseView = b;
  });

  var PropertiesView = BaseView.extend({

  });

  return PropertiesView;
});
于 2013-12-12T13:15:29.367 に答える
3

ここでの問題は、循環依存関係のようです。ベース ビューにはプロパティ ビューが必要であり、その逆も同様です。これにより、そのうちの 1 つが未定義になります。

于 2013-03-18T17:03:11.260 に答える
1

BaseView がそれに依存する必要がないように、PropertiesView を動的に要求することができます。

define(['backbone','underscore','jquery','views/node/base-view'],
   function(Backbone, _, $, NodeBaseView){
     PropertiesView = NodeBaseView.extend({

        });
     }
     return PropertiesView;
});

ここでPropertiesViewが必要です

define(['backbone','underscore','jquery'],
    function(Backbone, _, $, PropertiesView){
        NodeBaseView = Backbone.View.extend({
        ..
            var PropertiesView = require('views/node/properites-view');
        ..
            new PropertiesView({});
        ..
        });

});

例:

define(['views/node/base-view', 'views/node/properites-view'],
    function(NodeBaseView, PropertiesView){
        return {
            base: new NodeBaseView()
        }
});
于 2013-12-13T14:52:00.510 に答える