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).
Quelle "approche mentionnée ci-dessus"? S'il vous plaît soyez plus précis. Publiez aussi du code si vous le pouvez. –
@MaxLeske J'ai édité la question comme suggéré. J'espère que c'est plus clair maintenant. – max
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é. –