私は次のようなコードを使用しています:
img.load(function(){
// do some stuff
$(this).width();
});
私のコールバックでは、画像サイズは常に0です。それはそれと関係があるかもしれませんが、私の画像はローカルにロードされます。
しかし実際には、this.widthを実行すると、期待される幅が得られ、ここから何らかの計算を実行してextjsウィンドウを変更できます。
何度か試した後、$(this)を実行すると、変更したすべての属性がまったく効果がないように見えることに気付きました。
実行して$(this).width(40);
も画像の幅は変更されませんが、実行すると画像this.width = 40
の幅が変更されます。これ$(this)
は、HTMLImageElementを新しい要素内にコピーする場合と同じであり、これらの変更は、古いものを置き換えるためにdomに再度追加した場合にのみ適用されます。
そこで何が起こっているのかよくわかりません。
編集
これは私のimg
変数に含まれているものです。
img = $('<img>');
img.attr('src', '....image');
編集2
これは、jQueryがメモリ内の画像の画像サイズを処理しないという事実を実際には変更しませんが、Extjsを使用している人が私のエラーを繰り返さないのは良いことだと感じました。私の場合の大きな問題の1つは、img
使用したオブジェクトが有効なオブジェクトであったことですが、ExtJを使用しているため、誤って愚かな間違いを犯しました。私はそのようにウィンドウを作成しました...
Ext.create('Ext.Window',
// some settings
items: [{
html: img.wrap('<div>').parent().html(),
// etc
つまり、私が作成したイベントはimgにありましたが、実際img
にDOMに追加したことはありません。ExtJsは、イベントなどで変更できない新しいオブジェクトを作成するHTMLテキストをDOMに追加しました。
したがって、新しい要素を見つけるためにIDを作成する必要があります。これはすべて、の呼び出しが完了した後に実行する必要がmodalWindow.show()
あります。その後、すべてが完全に機能します。
ウィンドウのサイズを変更する場合、サイズが設定されている場合は、サイズを元に戻しnull
、ウィンドウでdoLayout呼び出しを実行すると、ウィンドウサイズが再計算されます。