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.     
]

Пока все в порядке. Обратите внимание, что обратный вызов поиска передается в 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, поэтому, пожалуйста, будьте терпеливы с глупыми вопросами и ужасным кодом (это мое первое приложение. Любые предложения приветствуются).


person max_cervantes    schedule 31.01.2017    source источник
comment
Какой подход упоминался выше? Пожалуйста, будьте более конкретными. Также опубликуйте код, если можете.   -  person Max Leske    schedule 31.01.2017
comment
@MaxLeske Я отредактировал вопрос, как было предложено. Надеюсь, теперь стало понятнее.   -  person max_cervantes    schedule 01.02.2017
comment
Намного лучше :). Какую версию Seaside вы используете? Что такое префикс tbs? (Я не очень знаком с новыми дополнениями). Я не вижу кода рендеринга для MCVehicleLookupComponent, но полагаю, что все в порядке, как вы говорите. Остановите блок, переданный #lookupCallback:, и посмотрите, сработает ли он.   -  person Max Leske    schedule 02.02.2017
comment
ты был прав. Я просто вызывал не тот компонент. Спасибо за поддержку.   -  person max_cervantes    schedule 02.02.2017
comment
tbs расшифровывается как twitter bootstrap, кстати   -  person max_cervantes    schedule 02.02.2017


Ответы (1)


Оказывается, я вызывал не тот компонент. Все работает как шарм. Извиняюсь.

person max_cervantes    schedule 02.02.2017