あなたの質問で述べたようthis.callParent(arguments)
に、スーパークラスで適切な関数を呼び出します。
つまりthis.callParent(arguments)
、コンストラクターで呼び出すと、拡張されているスーパークラスのコンストラクターが呼び出されます。
あなたが言及したチュートリアルでは、これは著者が行っていることです。
launch: function () {
//This line simply calls the super class(Ext.app.Controller) launch function
this.callParent(arguments);
var notesStore = Ext.getStore("Notes");
notesStore.load();
console.log("launch");
},
init: function () {
// This line simply calls the super class(Ext.app.Controller) init function
this.callParent(arguments);
console.log("init");
}
しかし、なぜ彼がこれを行うのか、そのチュートリアルではExt.app.Controller
クラスinit
と関数を呼び出す必要がないため、私にはわかりません。launch
例を挙げて説明しましょう
1) と呼ばれるスーパークラスの作成Main
Ext.define('MyApp.controller.Main', {
extend: 'Ext.app.Controller',
launch: function () {
console.log("Main launch");
},
init: function () {
console.log("Main init");
},
config: {
}
});
SubMain
2)拡張するサブクラスを作成するMyApp.controller.Main
Ext.define('MyApp.controller.SubMain', {
extend: 'MyApp.controller.Main',
launch: function () {
this.callParent(arguments);
console.log("launch");
},
init: function () {
this.callParent(arguments);
console.log("init");
},
config: {
}
});
アプリケーションを実行すると、スーパー クラスとサブクラスの両方に配置した console.log がブラウザ コンソールに次のように出力されます。
出力
Main init
Main init
SubMain init
Main launch
Main launch
SubMain launch
私たちが知っているように、アプリケーションを起動するinit
とlaunch
、すべてのコントローラーの機能が一度呼び出されます。
しかし、Main init と Main launch 関数が 2 回呼び出されているのがわかります。
再びスーパークラスのinitとlaunch関数と呼ぶ理由は、 (スーパークラス)クラスのinitとlaunch関数をもう一度呼び出すという関数のthis.callParent(arguments);
中に入れたからです。init and launch
SubMain
Main
もっとあります,関数arguments
に渡されたものは何ですかcallParent
引数は特別なパラメータです。
それでは、テストする例を見てみましょう
Ext.define('Mail.controller.Messages', {
extend: 'Ext.app.Controller',
config: {
refs: {
viewer: 'messageviewer',
messageList: 'messagelist'
},
control: {
messageList: {
itemtap: 'loadMessage'
}
}
},
loadMessage: function(item) {
this.getViewer().load(item);
}
});
Mail.controller.phone.Messages
class extends Mail.controller.Messages
、これは単にすべての構成と機能が継承されることを意味します。
Ext.define('Mail.controller.phone.Messages', {
extend: 'Mail.controller.Messages',
config: {
refs: {
main: '#mainPanel'
}
},
loadMessage: function(item) {
// Without this line loadMessage function of super class will not be invoked
this.callParent(arguments);
this.getMain().setActiveItem(1);
}
});
messageList
これで、ユーザーがクラス内のloadMessage
関数内のアイテムにタブを付けると、Mail.controller.phone.Messages
呼び出されます。
また、関数に配置this.callParent(arguments);
したloadMessage
ため、ファーストMail.controller.Messages
クラスloadMessage
関数が呼び出されてからthis.getMain().setActiveItem(1);
行が実行されます。
前述のようにloadMessage
、関数 inは、関数 atクラスにMail.controller.Messages
配置するまで呼び出されません。this.callParent(arguments);
loadMessage
Mail.controller.phone.Messages
引数は関数 ofitem
にのみ渡されますが、関数 of は引き続き引数を取得することに注意してください。loadMessage
Mail.controller.phone.Messages
loadMessage
Mail.controller.phone.Messages
item
クラスの関数内で関数arguments
を渡したからです。this.callParent
loadMessage
Mail.controller.phone.Messages