Итак, у меня есть приморское приложение. Первый компонент просто вынести субкомпонент:Smalltalk seaside #call: рендеринг пустой страницы
MCRootComponent>>initialize
super initialize.
self main: MCMainComponent new.
MCRootComponent>>renderComponentOn:html
renderContentOn: html
html render: main
Теперь субкомпонент визуализируется выглядит следующим образом:
MCMainComponent>>renderContentOn: html
html tbsForm:[
html tbsContainerFluid: [
html anchor
callback: [ self call: (MCServiceOrderComponent from: MCServiceOrder new)];
with: 'New Service Order' ]]
и MCServiceOrderComponent:
MCServiceOrderComponent>>initialize
super initialize.
customerComponent := MCClienteComponent new.
vehicleComponent := MCVehicleComponent new.
vehicleComponent lookupCallback: [
self show:(MCVehicleLookupComponent new) onAnswer:[:vehicle|
vehicle ifNotNil: [
serviceOrder vehicle: vehicle.
vehicleComponent objectToRender: vehicle.
customerComponent objectToRender: vehicle customer ]]]
MCServiceOrderComponent>>renderContentOn: html
html heading level1 with: 'ServiceOrder'.
html tbsForm with: [
html render: vehicleComponent.
html render: customerComponent.
]
До сих пор это делает Allright. Обратите внимание, что обратный вызов обращается к MCVehicleComponent. Этот блок передается обратному вызову на кнопку, отображаемую внутри MCVehicleComponent.
MCVehicleComponent>>renderContentOn: html
self renderContainer: 'Vehicle' on: html with: [
self renderSearchFor: #id on: html with: self lookupCallback.
self renderInputFor: #maker on: html.
self renderInputFor: #model on: html.
self renderInputFor: #color on: html ]
MCVehicleComponent>>renderSearchFor: aSymbol on: html with: aBlock
html tbsFormGroup: [
html label: aSymbol asCapitalizedPhrase.
html tbsInputGroup: [
html textInput tbsFormControl on: aSymbol of: self objectToRender.
html tbsInputGroupButton: [
html tbsButton callback: aBlock;
with: [ html tbsGlyphIcon iconSearch ] ] ]]
Он должен #call: в MCVehicleLookupComponent и вернуть результат обратно. Однако реальность такова, что как только #call: это сделано, содержимое страницы пуста. Я попытался вызвать MCVehicleLookupComponent непосредственно из MCMainComponent, и он отлично работает, поэтому я знаю, что проблемы там нет. Есть ли у вас какие-либо идеи, что может вызвать такое поведение?
Я довольно новичок в smalltalk, поэтому, пожалуйста, будьте терпеливы с глупыми вопросами и ужасным кодом (это мое первое приложение. Любые предложения приветствуются).
Какой «подход, упомянутый выше»? Пожалуйста, будьте более конкретными. Также отправьте некоторый код, если сможете. –
@MaxLeske Я отредактировал вопрос, как было предложено. Надеюсь, теперь все ясно. – max
Намного лучше :). Какую версию Seaside вы используете? Что такое префикс 'tbs'? (Я не очень хорошо знаком с новыми дополнениями). Я не вижу код рендеринга для 'MCVehicleLookupComponent', но я предполагаю, что это нормально, как вы говорите. Поместите остановку в блок, переданный в '#lookupCallback:', и посмотрите, запускается ли он. –