2017-01-31 2 views
1

J'ai donc une application balnéaire. Le premier composant tout simplement rendre un sous-composant:Smalltalk bord de mer #call: le rendu d'une page blanche

MCRootComponent>>initialize 
super initialize. 
self main: MCMainComponent new. 
MCRootComponent>>renderComponentOn:html 
renderContentOn: html 
html render: main 

Maintenant, le sous-RENDUES ressemble:

MCMainComponent>>renderContentOn: html 
html tbsForm:[ 
    html tbsContainerFluid: [ 
    html anchor 
    callback: [ self call: (MCServiceOrderComponent from: MCServiceOrder new)]; 
    with: 'New Service Order' ]] 

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

Jusqu'à présent, ce qui rend Allright. Notez que le rappel de recherche est passé à MCVehicleComponent. Ce bloc est transmis au rappel sur un bouton rendu dans 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 ] ] ]] 

Il devrait #CALL: un MCVehicleLookupComponent et retourner le résultat. Cependant, la réalité est que dès que le #call: c'est fait, le contenu de la page devient vide. J'ai essayé d'appeler MCVehicleLookupComponent directement à partir de MCMainComponent et cela fonctionne très bien, donc je sais que le problème n'est pas là. Avez-vous une idée de ce qui pourrait causer ce comportement?

Je suis assez nouveau à smalltalk alors s'il vous plaît soyez patient avec les questions stupides et le code horrible (ceci est ma première application.Toutes les suggestions sont les bienvenues).

+0

Quelle "approche mentionnée ci-dessus"? S'il vous plaît soyez plus précis. Publiez aussi du code si vous le pouvez. –

+0

@MaxLeske J'ai édité la question comme suggéré. J'espère que c'est plus clair maintenant. – max

+0

Beaucoup mieux :). Quelle version de Seaside utilisez-vous? Quel est le préfixe 'tbs'? (Je ne suis pas très familier avec les ajouts les plus récents). Je ne vois pas le code de rendu pour 'MCVehicleLookupComponent', mais je suppose que c'est bien, comme vous le dites. Mettez un arrêt dans le bloc passé à '#lookupCallback:' et voyez s'il est déclenché. –

Répondre

0

Il s'avère que j'appelais le mauvais composant. Tout fonctionne comme un charme. Pardon.