2017-01-31 20 views
1

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

+0

Какой «подход, упомянутый выше»? Пожалуйста, будьте более конкретными. Также отправьте некоторый код, если сможете. –

+0

@MaxLeske Я отредактировал вопрос, как было предложено. Надеюсь, теперь все ясно. – max

+0

Намного лучше :). Какую версию Seaside вы используете? Что такое префикс 'tbs'? (Я не очень хорошо знаком с новыми дополнениями). Я не вижу код рендеринга для 'MCVehicleLookupComponent', но я предполагаю, что это нормально, как вы говорите. Поместите остановку в блок, переданный в '#lookupCallback:', и посмотрите, запускается ли он. –

ответ

0

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