2012-02-24 9 views
1

私はビルド中にmvcアーキテクチャメソッドを使用しています。ExtJS4 MVCで他のビューで拡張コンポーネントを再利用する

ファイル構造:

app/ 
--->app.js 
--->view/ 
--------->viewport.js 
--------->Toolbar.js 
--------->SaveMenu.js 

viewport.js:

Ext.define('MyApp.view.Viewport', { 
extend: 'Ext.container.Viewport', 
layout: 'fit', 

requires: [ 
    'MyApp.view.Toolbar', 
    'MyApp.view.SaveMenu', 
], 

initComponent: function() { 
    this.items = { 
     dockedItems: [ 
      { 
       dock : 'top', 
       xtype : 'myapptoolbar', 
       height : 40, 
      } 
     ] 
... 
// more config, but this works now. 

Toolbar.js

私は再利用したいと次のことが可能であるかどうかを知りたいメニューを持っています
Ext.define ('Myapp.view.Toolbar', { 
    extend : 'Ext.toolbar.Toolbar', 
    alias : 'widget.myapptoolbar', 
    items : [ 
     { 
      text : 'Save', 
      // The following doesn't work, is there another way to achieve this? 
      menu : 'myappsavemenu', 
     } 
    ] 
}); 

SaveMenu.js

Ext.define ('Myapp.view.SaveMenu', { 
    extend : 'Ext.menu.Menu', 
    alias : 'widget.myappsavemenu', 
    items : [ 
     { 
      text : 'Save as...', 
     } 
    ] 
}); 

他のビューで以前に定義されたビューコンポーネントを再利用することはできますか?もしそうなら、どうすればよいでしょうか?

Uncaught TypeError: Cannot set property 'ownerCt' of undefined 

答えて

1

はい、それは完全に合理的だが、メニューのプロパティは、メニューインスタンス、メニューIDまたはオブジェクト設定する必要があります: -

編集は、この構成を使用するときにスローされるエラーを忘れました。

menu: {xtype: 'myappsavemenu'}, 

のExtJSのドキュメントがオンラインで入手できます:

私は行くだろう。ボタンのメニュー設定はここで扱われます:http://docs.sencha.com/ext-js/4-0/#!/api/Ext.button.Button-cfg-menu

一般に、私はExtに慣れています。

また、私が今削除した最初の方法は、すべてのmyapptoolbarsで同じメニューインスタンスを提供することにも注意してください。これは、あなたがやっていることによっては恐ろしいことかもしれません。問題が導入されたときにデバッグするのが難しいかもしれないので、私はそれを離れようとします。

+0

ありがとうございます:未知の型エラー:未定義のメソッド '部分文字列'を呼び出すことができません Ext.ClassManager.parseNamespace –

+0

うわー、私はあなたのアイテムを静的に設定しているのを見ませんでした。代わりに 'menu:{xtype: 'myappsavemenu'}'を試してみてください。 –

+0

ダビデのおかげで、両方の方法が実際に動作します。私は最初の方法を試してみるときに捉えていないタイプミスがありました。あなたはこれをあなたがどこから学んだかの方向に私を指摘できますか、またはあなたは簡潔な説明をしていますか? –

関連する問題