As an aside, I develop in asp.net with prototype, and I can relate to what
Iain is saying- you have to define your markup twice, however.. don't jump
on the asp-bashing bandwagon just yet- you'd have to do the same in any
server side language- cold fusion, php, asp; they all suffer from this.
Unless you develop your application to be completely client side driven,
where the data is sent to the client and it is *transformed* to markup using
templates, new Element et al; you end up having to place your markup in two
places.

How do others get around this problem? it's a pain to decide, for example, a
column needs to be in another position and having to change the markup in
two places.
I can think of 3 solutions.

Solution 1
Store the 'template' data on the server side. Write a class to retreive it
on the server side, and use (.net here) reflection to dynamically evaluate
it, thus meaning the same markup structure #{key} can be used. On the client
side, extend new Template so that the markup can be retreived from a URL.
Solution 2
Keep your markup entirely on the server, render the page as per normal
except always render a hidden version of the markup with no data fields
evaluated - then when the user changes data, grab the blank version and
interpolate/evaluate your changes into it.
Solution 3
Store your markup in .js files and parse them on the server. do the same as
1.

Iain, I've not tried using js from a runat=server tag but I expect it's
something to do with prototype being fairly advanced js and the microsoft
interpreter being 'jscript'.
i would lean towards trying to find a different way to structure your
application so that you don't need to include prototype on the server.
What variation are you using? vb.net / c#? .net 1 / 2? and what specific
functions were you trying to leverage in prototype for use on the server?

I don't want to wind the PHP folk up here, but being able to leverage the
.net framework and especially the Visual studio IDE speeds development up
for me.
I know there are similar ide's available for other languages but I tend to
feel that the php style of coding <? insert script here between your html ?>
is way too similar to the classic asp <% insert script here %> model which
never really worked in the first place.
PHP is definitely more advanced than classic asp, due to the large library
of functions available, but I hasten to point out that the grass is *always*
greener on the other side. Don't let the opinion of 'asp' cloud your
judgement of asp.net as it's come a long long way.

Gareth


On Jan 13, 2008 11:09 PM, iporter <[EMAIL PROTECTED]> wrote:

>
> Thanks Matt, I appreciate your thoughts.
>
> On Jan 11, 2:22 pm, Matt Foster <[EMAIL PROTECTED]> wrote:
> > I can't say I fully understand your troubles with ASP, maybe you
> > should boycott the evil empire and move on to greener pastures?
>
> The more I learn, the more I'm tempted.  But it would involve a bit of
> a learning curve for which I don't currently have time.
>
> > On the idea of having a web application that initiates with database
> > driven data on load and then has to interact with ajax requests to
> > update the document I suggest using a common service that serves XML.
> > Your asp environment will then be able to make the same call to
> > extract the XML and iterate over nodes for display as the ajax request
> > does.  In this way you only have one "middle tier" that interacts with
> > your data.  You have two displays though, one for Ajax, one for
> > traditional web, not the best case but when you've got to accommodate
> > a broad audience what can ya do.
>
> Yup, I think this is what I'm referring to when I say, 'I guess I
> could have used AJAX to get the server-side code to return the HTML.'
> The problem I have with this is that I'd have to pass all the
> parameters in addition to the data parameters.  For example, if I
> wanted to draw a menu with a server-side menu object, I'd have to pass
> the database parameters plus menu object parameters like 'sortable',
> 'collapsible', etc.  This doesn't seem intuitive.
>
> > Hope that helps,
> >                    Matt
> >
> > On Jan 10, 6:40 pm, iporter <[EMAIL PROTECTED]> wrote:
> >
> > > Although some javascript objects are client-specific (i.e. document)
> > > and others server-specific (i.e. Response), much of prototype.js can
> > > be used on the server-side.
> >
> > > In building a recent application, I found myself building converting
> > > database data into HTML objects on the server-side, to ensure it
> > > readable by the search engines, but having to largely duplicate that
> > > code for the client-side to redraw the HTML when the user updated
> > > things.  I guess I could have used AJAX to get the server-side code to
> > > return the HTML.
> >
> > > But I still need to have a client-side object, because I need to
> > > unobtrusivly add client-side behaviours to the HTML.  Thus, what I'd
> > > like to be able to do, is define a class in a .js file, and then
> > > inlcude that .js file with both the server-side and client-side code.
> >
> > > If you put the code, function test() {return 1;} in a .js file,
> > > include this file in an ASP page using a <script runat="server"> tag,
> > > and after this put <% Response.Write(test()) %>, you get '1' on the
> > > page.  However, if you add the code, var x = 2 to the .js file, and
> > > put <% Response.Write(String(x)) %> in your ASP page, you get
> > > 'undefined'.
> >
> > > Interestingly, if you then remove the code x = 2 from the .js file,
> > > but leave the call in the ASP page, you get a runtime error 800a1391
> > > with a message saying, 'x is undefined'.  Didn't our test before show
> > > it was already undefined?
> >
> > > The point being, that if functions work, but variables don't, then I
> > > can't use prototype's nice, var myClass = Class.create({}); syntax.
> >
> > > What gives?  Can I get around this somehow?  Or perhaps this is
> > > ridiculous and you have a better approach to the problem?
> >
> > > Looking forward to your thoughts,
> > > Iain
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to