Newbie question

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Newbie question

r00t uk
Hello All

I am slowly working my way through Squeak and Seaside using "An Introduction to Seaside" and the Seaside examples as my learning guides.  I have come across an issue which I don't understand, and I am hoping someone could enlighten me as to what is going wrong.  The two methods below are called by MLHeadDataModelView>>renderContentOn:,  with MLHeadDataModelView>>renderCompanyTextInputOn: resulting in a MessageNotUnderstood: WARenderCanvas>>value: error.

The instance methods are:

MLHeadDataModelView>>renderCompanyTextInputOn: "This method generates the 'MessageNotUnderstood: WARenderCanvas>>value:' error"
self
        renderLabel: 'Company Name: '
        input: [
            html textInput;
            value: self headDataModelView companyName;
            callback: [:value | self headDataModelView companyName: value]]
        output: self headDataModelView companyName
        on: html.

MLHeadDataModelView>>renderEmployeeTextInputOn:
self
        renderLabel: 'Employee Name: '
        input: [
            html textInput setFocus;
            value: self headDataModelView employeeName;
            callback: [:value | self headDataModelView employeeName: value]]
        output: self headDataModelView employeeName
        on: html.

MLHeadDataModelView>>initialize
initialize
    super initialize.
   self headDataModelView: MLHeadDataModel new.

I don't get any error messages if I use the on:of: style, but not sure what exact difference or benefits are between the two.

MLHeadDataModelView>>renderCompanyTextInputOn:
renderCompanyTextInputOn: html
self

        renderLabel: 'Company Name: '
        input: [
            html textInput on: #companyName of: self headDataModelView]
        output: self headDataModelView companyName
        on: html.

MLHeadDataModelView>>renderEmployeeTextInputOn:
renderEmployeeTextInputOn: html
self
        renderLabel: 'Employee Name: '
        input: [
            html textInput on: #employeeName of: self headDataModelView]
        output: self headDataModelView employeeName
        on: html.

Thanks in advance for any feedback.

Regards
Adrian

_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
Reply | Threaded
Open this post in threaded view
|

Re: Newbie question

jgfoster
Hi Adrian,

I haven't tried your code myself, but a brief visual scan suggests at least one problem that I've identified below...

On Aug 30, 2008, at 9:32 PM, r00t uk wrote:

Hello All

I am slowly working my way through Squeak and Seaside using "An Introduction to Seaside" and the Seaside examples as my learning guides.  I have come across an issue which I don't understand, and I am hoping someone could enlighten me as to what is going wrong.  The two methods below are called by MLHeadDataModelView>>renderContentOn:,  with MLHeadDataModelView>>renderCompanyTextInputOn: resulting in a MessageNotUnderstood: WARenderCanvas>>value: error.

The instance methods are:

MLHeadDataModelView>>renderCompanyTextInputOn: "This method generates the 'MessageNotUnderstood: WARenderCanvas>>value:' error"
self
        renderLabel: 'Company Name: '
        input: [
            html textInput;
            value: self headDataModelView companyName;
            callback: [:value | self headDataModelView companyName: value]]
        output: self headDataModelView companyName
        on: html.

MLHeadDataModelView>>renderEmployeeTextInputOn:
self
        renderLabel: 'Employee Name: '
        input: [
            html textInput setFocus;

In Smalltalk the semantics of a cascade (indicated by the semi-colon) means that the following #value: message is being sent to the receiver of the last message. The last message is #setFocus, and the receiver of the #setFocus was the object returned by the #textInput message. Thus, #value: is being sent to a WATextInputTag (or similar object), not to the WARenderCanvas (which is probably what you really wanted).

            value: self headDataModelView employeeName;
            callback: [:value | self headDataModelView employeeName: value]]
        output: self headDataModelView employeeName
        on: html.

MLHeadDataModelView>>initialize
initialize
    super initialize.
   self headDataModelView: MLHeadDataModel new.

I don't get any error messages if I use the on:of: style, but not sure what exact difference or benefits are between the two.

The difference is that you don't have a #setFocus message.

MLHeadDataModelView>>renderCompanyTextInputOn:
renderCompanyTextInputOn: html
self

        renderLabel: 'Company Name: '
        input: [
            html textInput on: #companyName of: self headDataModelView]
        output: self headDataModelView companyName
        on: html.

MLHeadDataModelView>>renderEmployeeTextInputOn:
renderEmployeeTextInputOn: html
self
        renderLabel: 'Employee Name: '
        input: [
            html textInput on: #employeeName of: self headDataModelView]
        output: self headDataModelView employeeName
        on: html.

Thanks in advance for any feedback.

Regards
Adrian

Hope that helps, and welcome to Seaside!

James Foster


_______________________________________________
seaside mailing list
[hidden email]
http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside