Итак, у меня есть обратный вызов без Ajax, отлично работающий с использованием этого кода (метод «convert» вычисляет новое значение для переменной экземпляра «result»):
html form: [
html text: 'Number to convert: '.
html textInput
callback: [ :value | self setNumtoconvert: value ];
value: numtoconvert.
html break.
html text: 'Result: '.
html text: result.
html break.
html submitButton
value: 'Convert';
callback: [ self convert ]
].
... и теперь я пытаюсь "Ajax-ify" с помощью jQuery. Я пробовал что-то в этом роде:
(html button)
onClick: ((html jQuery ajax)
callback: [ self convert]);
id: 'calclink';
with: 'Convert'.
...что не работает, так как я явно упускаю какой-то секретный соус. Может ли эксперт Seaside присоединиться и дать мне краткое руководство по преобразованию «обычного» кода обратного вызова в код обратного вызова «jQuery Ajax»?
ОБНОВЛЕНИЕ Я очень близок к тому, чтобы понять это; После поиска в Интернете и повторного просмотра черновиков глав в книге Seaside я изменил свою кнопку Ajax-ified на это:
(html button)
onClick: ((html jQuery ajax)
callback:[:val | self setNumtoconvert: val.
self convert.
Transcript show: self getResult.]
value:(html jQuery: '#txtNumToConvert') value;
onComplete: ((html jQuery: '#txtResult') value: self getResult)
);
id: 'calclink';
with: 'Convert'.
Теперь единственный вопрос заключается в том, как установить значение текстового поля «#txtResult»; Transcript show: self getResult
отображает правильное значение, но я не могу заставить строку «onComplete» обновить значение «#txtResult». Я могу использовать onComplete: ((html jQuery: '#txtResult') value: 'hello there')
для вставки строковой константы в текстовое поле, но self getResult
не предоставляет значение для текстового поля, хотя, опять же, я получаю правильное значение при отображении self getResult
в окне стенограммы.
ОБНОВЛЕНИЕ ВТОРОЕ Моя строка onComplete действительно работает, но только после нажатия кнопки (для вычисления значения), обновления страницы, затем нажатия кнопку еще раз (чтобы отобразить рассчитанное значение в текстовом поле «txtResult». Как это исправить?
МОЙ ОТВЕТ
Наконец-то я придумал решение, которое легче понять (для меня) и менее многословно, что мне очень нравится:
renderContentOn: html
html form:[
html textInput
id: #txtNumToConvert;
callback: [ :value | self setNumtoconvert: value ];
value: numtoconvert.
html break.
html span
id: #result;
with: result.
html break.
html anchor
url: 'javascript:void(0)';
onClick: ((html jQuery id: #result) load
serializeForm;
html: [self convert. html span with: result]);
with: 'Convert to Decimal'.
]