Начните с этой дрозофилы:
Ext.onReady(function() {
Ext.create("Ext.window.Window", {
height: 100,
width: 100,
html: "<div><img id=\"TestImg\"></div>",
listeners: {
afterrender: function(win, eOpts) {
this.getImg().addListener("load", function(e, img, eOpts) {
if(window.console && console.log)
console.log("img.onload(%o) - теперь здесь можно дергать jQuery'вскую суперпупермегафункцию, работающую с изображением", arguments);
});
},
resize: function(win, width, height, eOpts ) {
var
imgs = ["http://javascript.ru/forum/images/smilies/cray.gif", "http://javascript.ru/forum/images/smilies/help.gif", "http://javascript.ru/forum/images/smilies/stop.gif", "http://javascript.ru/forum/images/smilies/smile.gif"];
this.getImg().set({ src: imgs[(width+height)%4] });
}
},
getImg: function() {
if(!this.img)
this.img = Ext.get("TestImg");
return this.img;
}
}).show();
});
|
Начал переделывать так как вы написали.
Контент загружается первый раз и выделяется, но не отсылает данные на сервер и при изменении размера ничего не происходит.. Может подскажете где зарыто?
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>JFreeChart_Bsp</title>
<link rel="stylesheet" type="text/css" href="./extjs/resources/css/ext-all.css">
<link rel="stylesheet" type="text/css" href="./jQuery/imgareaselect-0.9.8/css/imgareaselect-default.css"/>
<script type="text/javascript" src="./jQuery/jquery-1.7.2.js"></script>
<script type="text/javascript" src="./jQuery/imgareaselect-0.9.8/scripts/jquery.min.js"></script>
<script type="text/javascript" src="./jQuery/imgareaselect-0.9.8/scripts/jquery.imgareaselect.js"></script>
<script type="text/javascript" src="./extjs/ext-all-debug.js"></script>
</head>
<body>
<script type="text/javascript">
var random = Math.floor((Math.random() * 10000) + 1);
var cookie = "cookieName=" + random;
var adresse = "/JFreeeChartServlet/generateImg?" + cookie;
var cookieString = new String();
Ext.onReady(function() {
Ext.create("Ext.window.Window", {
height: 785,
width: 1465,
html: '<div id="generateImage"><img id="target"></div>',
listeners: {
afterrender: function(win, eOpts) {
this.getImg().addListener("load", function(e, img, eOpts) {
$("#target").one('load', loadCallback).attr('src', adresse).each(function () {
if (this.complete) $(this).trigger('load');
});
});
},
resize: function(win, width, height, eOpts ) {
this.getImg().set({ src: adresse });
}
},
getImg: function() {
if(!this.img)
this.img = Ext.get("target");
return this.img;
}
}).show();
$('#target').imgAreaSelect({
handles: true,
movable: false,
resizable: false,
autoHide: true,
onSelectEnd: function (img, selection) {
$("#target").one('load', loadCallback).attr("src", adresse + "&x1=" + selection.x1 + "&y1=" + selection.y1 + "&width=" + selection.width + "&height=" + selection.height).each(
function () {
if ($("#target").complete)
$("#target").trigger('load');
});
}
});
});
function loadCallback() {
cookieString = get_all_cookie(random)
// console.log("Cookie@"+random+" DocCookie = " + cookieString);
// console.log("Cookie@"+random+" : "+substr_search("plotWidth"));
// console.log("Cookie@"+random+" : "+substr_search("plotHeight"));
// console.log("Cookie@"+random+" : "+substr_search("plotX"));
// console.log("Cookie@"+random+" : "+substr_search("plotY"));
setVars(substr_search("plotWidth"), substr_search("plotHeight"), substr_search("plotX"),substr_search("plotY"));
}
function get_all_cookie(cookie_name) {
var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)');
if (results) return (unescape(results[2]));
else return null;
}
function substr_search(str){
var strStartPos = cookieString.search(str);
var startPos = cookieString.indexOf("=", strStartPos);
var endPos = cookieString.indexOf(":", strStartPos);
return cookieString.substring(startPos+1, endPos);
}
</script>
</body>
</html>
Спасибо! |
Хмммм, а вот эта функция вообще срабатывает несколько раз, а может и несколько десятков раз в секунду..
afterrender: function(win, eOpts) {
this.getImg().addListener("load", function(e, img, eOpts) {
console.log("Listener");
$("#target").one('load', loadCallback).attr('src', adresse).each(function () {
if (this.complete) $(this).trigger('load');
});
});
},
|
Вы уже сами себе ответили?
|
Так вот, послушал вас, обеспечил все в ексте, а дальше..
но срабатывает несколько раз в сек не моя функция джКвери, а срабатывает вот это..
this.getImg().addListener("load", function(e, img, eOpts) {
3 console.log("Listener");
Как исправить? Пасиб |
Цитата:
Цитата:
Цитата:
Цитата:
|
[quote автор]Найти "виновника торжества" - того, кто меняет src <img> несколько раз в секунду. И тут мы снова возвращаемся к? Вы теперь выяснили для себя что конкретно стоит за каждым вагоном паравоза? Или продолжаем в духе а-ля:[/quote] - да!
Вот с коментариями и переделаная. Вот это было раньше
$("#target").one('load', loadCallback).attr('src', adresse).each(function () {
if (this.complete) $(this).trigger('load');
});
Вот так я переделал.
$("#target").bind('load', loadCallback);//вешаем евент на img c id="target"
var imgObj = $("#target").attr('src', adresse);//засовываем в imgObj картинку которую получили в последствии изменения аттрибута src, в него грузим картинку adresse="/JFreeeChartServlet/generateImg?cookieName=random"
$(imgObj).each(function () {//вызиваем функцию для нашей картинки
if (imgObj.complete) // картинка загружена полностью, тогда
$(imgObj).trigger('load');//триггер вызывает евент 'load' - идет на выполнение функция loadCallback().
});
Этот весь замут с триггером нужно, чтоб сразу же прочитать кукисы с сервера и вставить необходимые значения в плагин imgAreaSelect. Если я просто вызову функцию loadCallback() после загрузки картинки без этих фишек, у меня при первом вызове кукисы будут нулевые. |
надеюсь, что по этому вопросу больше вопросов нет. :)
Вот так у меня получилось, все загружает так как нужно.
<script type="text/javascript">
var random = Math.floor((Math.random() * 10000) + 1);
var cookie = "cookieName=" + random;
var adresse = "/JFreeeChartServlet/generateImg?" + cookie;
var cookieString = new String();
Ext.onReady(function() {
Ext.create("Ext.window.Window", {
height: 785,
width: 1465,
html: '<div id="generateImage"><img id="target"></div>',
listeners: {
resize: function(win, width, height, eOpts ) {
$("#target").bind('load', loadCallback);
var imgObj = $("#target").attr('src', adresse + "&chartW=" + width + "&chartH=" + height);
$(imgObj).each(function () {
if (imgObj.complete)
$(imgObj).trigger('load');
});
}
}
}).show();
$('#target').imgAreaSelect({
handles: true,
movable: false,
resizable: false,
autoHide: true,
onSelectEnd: function (img, selection) {
$("#target").bind('load', loadCallback);
var newImg = $("#target").attr("src", adresse + "&x1=" + selection.x1 + "&y1=" + selection.y1 + "&width=" + selection.width + "&height=" + selection.height);
$(newImg).each(
function () {
if ($(newImg).complete)
$(newImg).trigger('load');
});
}
});
});
function loadCallback() {
cookieString = get_all_cookie(random)
setVars(substr_search("plotWidth"), substr_search("plotHeight"), substr_search("plotX"),substr_search("plotY"));
}
function get_all_cookie(cookie_name) {
var results = document.cookie.match('(^|;) ?' + cookie_name + '=([^;]*)(;|$)');
if (results) return (unescape(results[2]));
else return null;
}
function substr_search(str){
var strStartPos = cookieString.search(str);
var startPos = cookieString.indexOf("=", strStartPos);
var endPos = cookieString.indexOf(":", strStartPos);
return cookieString.substring(startPos+1, endPos);
}
</script>
Если можно еще два вопроса. Я вот пробовал с помощью плагина jQuery.cookies вытащить кукисы, чтоб избавиться от этих трех функций, которые я использую для того чтоб их достать, но почему-то в loadCallback() $.cookie равно нулю, хотя функция прекрасно тащит их с DOM. И еще одно, у меня окошко в котором я определяю координаты, если я перетаскиваю окошко, соответственно координати у плагина теряются, как мне отслеживать поведение перемещения окна ExtJs. спасибо Вам большое!! |
Цитата:
Цитата:
|
| Часовой пояс GMT +3, время: 12:54. |