Я использую код, который выглядит так:
img.load(function(){
// do some stuff
$(this).width();
});
В моем обратном вызове размер изображения всегда равен 0. Это может иметь какое-то отношение к этому, но мои изображения загружаются локально.
Но на самом деле, если я сделаю this.width, я получу ожидаемую ширину, а затем смогу выполнить какие-то вычисления, чтобы изменить свое окно extjs.
После некоторых попыток я понял, что если я сделаю $(this), то все атрибуты, которые я изменю, не окажут никакого эффекта.
выполнение $(this).width(40);
не изменит ширину моего изображения, но выполнение this.width = 40
изменит ширину моего изображения. Это как если бы выполнение $(this)
копировало мой HTMLImageElement в новый элемент, и эти изменения применялись бы только в том случае, если бы я снова добавил в дом, чтобы заменить старый.
Я не уверен, что понимаю, что там происходит.
Редактировать
Это то, что содержит моя переменная img
.
img = $('<img>');
img.attr('src', '....image');
Правка 2
Это на самом деле не меняет того факта, что jQuery не обрабатывает размер изображения для изображений в памяти, но я подумал, что всем, кто использует Extjs, будет полезно не повторять мою ошибку. Одна из больших проблем в моем случае заключается в том, что объект img
, который я использовал, был допустимым объектом, но, поскольку я использую ExtJ, я непреднамеренно совершил глупую ошибку. Я создал свое окно таким образом...
Ext.create('Ext.Window',
// some settings
items: [{
html: img.wrap('<div>').parent().html(),
// etc
Другими словами, событие, которое я создал, было в img, но я никогда не добавлял img
в DOM. ExtJs добавил html-текст в DOM, который создал новый объект, который нельзя изменить с помощью события и так далее.
Поэтому мне нужно создать идентификатор, чтобы найти новый элемент, и все это должно быть сделано после вызова modalWindow.show()
. После этого все работает идеально.
Для изменения размера окна, если размеры установлены, вы можете установить их обратно в null
и выполнить вызов doLayout для окна, и он пересчитает размер окна.