Превед. Пытался разобраться с JS closure чтобы написать свои JS контролы, через которые вызываю web service для заполнения их данными. Итак... написал след. JS классы. ControlClass -это базовый класс, WeatherClass - наследник. Таких как WeatherClass может быть много. Общие методы и проперти вынесены в родительский ControlClass. Вызов Веб Сервиса осуществляется в конструкторе класса. Вызываю след. образом:
var weather = New Weather($get("Div1"));
Div1 - это контейнер, куда кладётся результат - отендеренный HTML код.
В коде в самом низу я добавляю кнопку при нажатии на которую я хочу перегрузить данные, причём сохраняя ранее установленное содержимое WeatherClass контрола. В функцию onSuccess передаётся копия самого обьекта через userContext. Как это можно сделать? Никак не могу разобраться как и что мне вызвать в событии onclick для кнопки:
<input id='Button1' type='text' value='Reload the Weather' onclick='...'>?
Идея в том чтобы не создавать заново обьект WeatherClass, а использовать уже созданный. Спасибо.
////////////////////////////// ControlClass //////////////////////////////
function ControlClass(container) {
this.container = null;
this.html = null;
}
ControlClass.prototype.onLoading = function() {
this.html = "Loading...";
this.render();
}
// come here when web service call failed
ControlClass.prototype.onFailed = function(error, control) {
control.html = "Error!";
control.render();
}
ControlClass.prototype.render = function() {
this.container.innerHTML = this.html;
}
////////////////////////////// WeatherClass //////////////////////////////
WeatherClass.prototype = new ControlClass(); // inheritance from ControlClass
function WeatherClass(container) {
this.container = container;
// web service call
WebService.GetWeather(this.onSuccess, this.onFailed, this);
this.onLoading(); // show loading...
}
// come here when web service call succedeed
WeatherClass.prototype.onSuccess = function(data, control) { // control is the user context, it's the control itself passed as this
control.html = data; // here we get some data back from the web service
control.html += "<input id='Button1' type='text' value='Reload the Weather'>"; // Здесь надо добавить onclick='что то...' чтобы используя уже созданный ранее обьект, вызвать через него веб сервис и перегрузить данные
control.render();
}
Данное сообщение получено с сайта GotDotNet.RU
|