Итак, у меня есть морское приложение. Первый компонент просто отображает подкомпонент:
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.
]
Пока все в порядке. Обратите внимание, что обратный вызов поиска передается в 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, поэтому, пожалуйста, будьте терпеливы с глупыми вопросами и ужасным кодом (это мое первое приложение. Любые предложения приветствуются).
tbs
? (Я не очень знаком с новыми дополнениями). Я не вижу кода рендеринга дляMCVehicleLookupComponent
, но полагаю, что все в порядке, как вы говорите. Остановите блок, переданный#lookupCallback:
, и посмотрите, сработает ли он. - person Max Leske   schedule 02.02.2017