2017-02-23 15 views
2

ExtJS MessageBoxはJavaScriptのアラート(..)のようにブロックされていないようです。ポップアップを表示してから、AJAXコールを呼び出すと、ウィンドウが閉じられます。ExtJS MessageBoxは警告(..)のようにブロックしません

私は..noポップアップが表示されている...

//Alert Box : 
var alertBox = Ext.create('Ext.window.MessageBox'); 
var config = { 
    title : 'Title', 
    closable: true, 
    msg: 'Message', 
    buttons: Ext.Msg.OK, 
    buttonText: { ok: EML.lang.buttons.ok }, 
    modal: true 
}; 
alertBox.show(config); 


//callback 
Ext.Ajax.request({ 
    url: someURL, 
    method: 'POST', 
    callback: function (options, success, response) { 
     //do some stuff 
     self.up('window').destroy(); 
    } 
}) 

、このようなショーメソッドを呼び出すと、しかし、親ウィンドウが閉じています。

標準のJavascript アラートを使用すると、アラートがブロックされます。 OKボタンをクリックすると、コールバックが実行された後、ウィンドウが閉じます。

//Alert Box : 
    alert('asdf') 


    //callback 
    Ext.Ajax.request({ 
     url: someURL, 
     method: 'POST', 
     callback: function (options, success, response) { 
      //do some stuff 
      self.up('window').destroy(); 
     } 
    }) 
  • なぜメッセージボックスはブロックしませんか?
  • この問題を回避するにはどうすればよいですか?
  • MessageBoxは何らかの理由でブロックする親ウィンドウについて知る必要がありますか?

答えて

4

ブロックがカスタムJavaScriptコードでサポートされていないためブロックされません。クロームコンソールからわかるように、

window.alert 
function alert() { [native code] } 

ネイティブコードで実行をブロックすることができます。 ExtJSので

、あなたがこのようなメッセージボックスのコールバックを記述します。

//Alert Box : 
var alertBox = Ext.create('Ext.window.MessageBox'); 
var config = { 
    title : 'Title', 
    closable: true, 
    msg: 'Message', 
    buttons: Ext.Msg.OK, 
    buttonText: { ok: EML.lang.buttons.ok }, 
    modal: true, 
    callback:function(btn) { 
     //callback 
     Ext.Ajax.request({ 
      url: someURL, 
      method: 'POST', 
      callback: function (options, success, response) { 
       //do some stuff 
       self.up('window').destroy(); 
      } 
     }) 
    } 
}; 
alertBox.show(config); 

、このようなコールバックが深くネストされている場合は、私はこのようなコールバック平坦にする傾向がある:で

var store = me.down('grid').getStore(), 
    callback3 = function(btn) { 
     if(btn=="yes") store.sync(); 
    }, 
    callback2 = function() { 
     Ext.Msg.prompt('A','Third', callback3); 
    }, 
    callback1 = function() { 
     Ext.Msg.alert('A','Second', callback2); 
    }; 
Ext.Msg.alert('A','First', callback1); 

をExtJSの新しいバージョンでは、Ext.Promiseをチェックアウトできますが、ExtJS 4.1ではチェックアウトできません。

+0

私は結局、このように実装しました。それはあまりうまく読みません。 5つのアラートボックスが連続している状況がある場合はどうなりますか? Javascriptで私はちょうど5列の警告(..)を持っています。 Extjsで私は混乱のように見えるお互いの中に5つのメッセージボックスを埋め込む必要があるだろう...約束で何らかの方法がない限り –

+0

@OliverWatkins私は自分の答えを修正した。 – Alexander

関連する問題