ここで参照されるフィドルとコードは、実際には機能しません。私は、1つのファイルプロジェクトで定義されたコントローラを取得する方法を知らない。いずれにせよ、私の問題は、私がコントローラ機能(私の場合には後で)にいるときです。私はtestvalへの参照を取得する方法を把握することはできません。別の起動で単に19〜32行の単純な例を作成すると、それは動作します(fiddle:https://fiddle.sencha.com/#fiddle/1ae7を参照)。ExtJS 6コントローラーのスコープをajax.requestに渡す方法
しかし、私のコントローラのケースでは、私の成功または失敗のイベントでtestvalを取得していません。私の関数の文脈(スコープ)で渡す方法私はAjaxリクエストを呼び出していますか?
https://fiddle.sencha.com/#fiddle/1ae9
Ext.define('mycontroller', {
extend: 'Ext.app.Controller',
alias: 'controller.main',
myfun: function() {
console.log('controller:myfun');
}
});
var mypanel = Ext.create('Ext.panel.Panel', {
controller: {
type: 'main'
},
listeners: {
afterrender: function() {
console.log('afterrender');
var testval = "hi there";
Ext.Ajax.request({
method: 'POST',
url: '/dummy',
jsonData: 'jsonData',
scope: this,
success: function() {
// this never gets called, just testing scope
},
failure: function() {
// testval IS NOT IN SCOPE, CONFUSED ABOUT SCOPE AND THIS HERE
Ext.Msg.alert('info', testval);
}
});
}
},
html: 'test panel'
});
Ext.application({
name: 'Fiddle',
launch: function() {
Ext.create('Ext.container.Viewport', {
layout: 'fit',
items: [mypanel]
});
}
});
あなたがしようとしていることは明らかではありません。あなたの例のように、 'afterrender'の中で定義されたローカル変数' testval'にアクセスするだけですか?そして、それはうまくいくはずです。コントローラーはあなたの例ではどこにも使われていません。 'afterrender'はビューに属していて、関数内のローカルスコープ変数にアクセスしています。リスナーをコントローラーに移動する場合は、リスナーを 'listener:{afterrender:" controller_function "}'として定義し、コントローラー・ファイルに関数を移動する必要があります。 – serg
@serg私の問題は、testvalがExt.Ajax.requestの失敗の戻りの中で未定義であるということです。私の例(フィドル)では、私はちょうど呼び出され、フィドルでそれをワイヤリングする方法を理解していないようにすることを試みています(実際の問題をデモしようとしていますが、実際の問題ではありません) –
実際のコード構造この例とは異なっていますが、たとえそれがフィドルの内部で動作しなくても、それを見ることは役に立ちます。 – serg