2013-03-18 7 views
8

私は基幹アプリケーションの構築に精通していますが、requirejsを使用するためにそれを変換しようとしています、私が直面しています問題があるrequirejsを使用して拡張できません見て、それがundefinedバックボーンiが親ビューを拡張しようとしていたときに

です親ベースビュー内の子ビューをインスタンス化プロパティ-view.js

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

     }); 
    } 
}); 

にベースview.jsを拡張しようとしている

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

}); 

NodeBase PropertiesView用に拡張しようとすると、表示はundefinedになります。どんな助け?

注:私は、バックボーンのAMDのバージョンを使用し、ここでの問題は、循環依存関係のように見えるここhttps://github.com/amdjs

+0

はあなたがビューを返していますか?最後の 'return NodeBaseView;'のように。 – rednaw

+1

が可能でした。私は6ヶ月以上前にこのエラーを解決し、今覚えていない。 –

答えて

3

からアンダーいます。基本ビューにはプロパティビューが必要であり、その逆もあります。これにより、その1つが未定義になります。

+0

私はそれを理解しています。しかし、バックボーンの正規版にはこの問題はなく、ビューの拡張も機能の1つです。どのように私はここでこれを修正することができますどのようなアイデア –

+2

私は完全に質問を誤解していない限り、明確にするために、あなたが経験している問題はバックボーンとは関係ありません。それはむしろあなたがどのようにrequireを使用しているかでです。 AMDでは円の依存関係は認められていません。 (私が間違っていると誰かが私を修正します。)あなたが要求を使用していなくても、親ビューは子ビューに依存することは私には奇妙に思えます。あなたのコードにとって何が最善であるかを教えようとせず、依存関係のlibがそれを許さない正当な理由があると思うと言っているだけです。それが私の場合は、単に3つのビューを使用して問題を回避したいと思います。 – greim

+0

親ビューを拡張する子ビュー(子ビューを拡張する親ビューではない)。誰かが親メソッドとイベント処理を使用するために、バックボーンでAMDを使用し、親ビューを子ビューに拡張した経験があるかどうか疑問に思っていました。 –

3

のは、この定義は、あなたの子ビューとして次に

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; 
}); 
+0

私の場合、はい、私は "PropertiesView"を返しています。私は親から子をインスタンス化するはずではないようですが、親にその子を認識させる別の方法を考えることはできません。 – darksoulsong

+0

原則として親から子ビューをインスタンス化する際には何も問題ありません。代わりに、CommonJS形式を使用するか、あなたのビューのうちの1つだけを必要とすることができます。次のURLのredolentの例を参照してください:http://stackoverflow.com/questions/4881059/how-to-handle-circular-dependencies-with-requirejs-amd – backdesk

1

BaseViewはそれに依存する必要はありませんので、あなたは、動的にPropertiesViewを必要とする可能性があります。

あなたがPropertiesView

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

}); 

例が必要です。ここ

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

     }); 
    } 
    return PropertiesView; 
}); 

define(['views/node/base-view', 'views/node/properites-view'], 
    function(NodeBaseView, PropertiesView){ 
     return { 
      base: new NodeBaseView() 
     } 
}); 
関連する問題