On Tue, Mar 9, 2010 at 1:11 PM, Stuart Roebuck <[email protected]>wrote:
> Once again, thanks for all of this. I will now go away and
> contemplate it all.
>
> On the face of it, as a newby, this JavaScript DSL adds another layer
> of complexity to using Lift with JavaScript. Is there an option to
> use mostly raw JavaScript? What are the advantages / disadvantages?
>
JsRaw("my JavaScript Here")
The disadvantage is type-safety/having the compiler help you.
I wrote most of the JavaScript helpers (or at least wrote the core stuff and
other followed my pattern.) A few months back, there was a discussion about
changing that stuff around. I'd like to see Lift's JavaScript helper be a
lot more composable than they are now... like the Lift-json stuff and also
integrate better with Lift-json. But I don't see that happening with Lift
2.0 unless there's a huge block of time/effort that someone wants to throw
at the issue.
>
> Sorry, I thought I'd get my moneys worth from you and then try to put
> something onto the wiki.
>
> Best,
>
> Stuart.
>
> On Mar 9, 5:35 pm, Ross Mellgren <[email protected]> wrote:
> > That's why I factored this as a JQueryNodeSeq, so you can pass anything
> to dialog (I've used JQuery, and figured you'd need to pass something in
> there ;-)
> >
> > JQueryNodeSeq(ns) ~> JsFunc("dialog", JsObj("autoOpen" -> JsTrue, "width"
> -> 500, ..., "close" -> AnonFunc(JsVal("this") ~> JsFunc("destroy"))))
> >
> > >>> case class JQueryNodeSeq(ns: NodeSeq) extends JsExp with JQueryLeft
> with HtmlFixer {
> >
> > JsExp is the basic trait of the JavaScript DSL. Anything that can go into
> a JavaScript expression should have this trait.
> > JQueryLeft is a trait used by the JQuery portion of the JavaScript DSL to
> indicate that you can chain JQuery calls onto this.
> > HtmlFixer is a trait that provides fixHtml
> >
> > >>> override def toJsCmd = "jQuery(" + JsStr(fixHtml("NodeSeqDialog",
> ns)).toJsCmd + ")"
> >
> > fixHtml takes the given NodeSeq and does all the appropriate magics to
> process lift: tags and then converts the NodeSeq to valid XHTML.
> >
> > >>> }
> >
> > And don't forget the security implications!
> >
> > Hope that helps,
> > -Ross
> >
> > On Mar 9, 2010, at 12:30 PM, Stuart Roebuck wrote:
> >
> >
> >
> > > Thanks for that amazingly quick response!
> >
> > > I only wish I understood the proposed solution! :-)
> >
> > > So (confession time) I simplified things a little, the actual
> > > JavaScript is…
> >
> > > var theDialog = $(…).dialog( { autoOpen: true, width: 500, modal:
> > > true, close: function() { theDialog.destroy; }; } )
> >
> > > How do I assemble this, or is there any documentation / examples you
> > > can point me to.
> >
> > > Thanks very much,
> >
> > > Stuart.
> >
> > > On Mar 9, 5:14 pm, Ross Mellgren <[email protected]> wrote:
> > >> Whoops, I meant Str(fixHtml(...)) not JsStr(fixHtml(...))
> >
> > >> -Ross
> >
> > >> On Mar 9, 2010, at 12:14 PM, Ross Mellgren wrote:
> >
> > >>> Try this (I haven't tested it, so there could be lurking bugs):
> >
> > >>> case class JQueryNodeSeq(ns: NodeSeq) extends JsExp with JQueryLeft
> with HtmlFixer {
> > >>> override def toJsCmd = "jQuery(" + JsStr(fixHtml("NodeSeqDialog",
> ns)).toJsCmd + ")"
> > >>> }
> >
> > >>> Then JQueryNodeSeq(ns) ~> JsFunc("dialog")
> >
> > >>> -Ross
> >
> > >>> On Mar 9, 2010, at 12:06 PM, Stuart Roebuck wrote:
> >
> > >>>> I'm trying to produce a web page with editable content.
> >
> > >>>> When the user clicks an edit button on a line it uses jQuery to
> > >>>> display a modal dialog which allows fields of that line to be
> edited.
> >
> > >>>> I can easily produce a snippet to produce the lines using the
> backend
> > >>>> data and an XHTML template and binding etc.
> >
> > >>>> However, I also want the template to include the template for the
> > >>>> dialog. So I want the ajax button callback to send JavaScript to
> > >>>> instantiate the jQuery UI dialog based on the template and bindings.
> >
> > >>>> To build this I need to assemble a JsCmd containing the NodeSeq that
> > >>>> comes from the XHTML sequence and the bindings.
> >
> > >>>> In short, if this was straight jQuery I would have some JavaScript
> of
> > >>>> the form:
> >
> > >>>> $(<div title="Dialog Title">theFormNodeSeq</div>).dialog()
> >
> > >>>> But in my case theFormNodeSeq comes from a NodeSeq that was
> assembled
> > >>>> from part of the XHTML template and the bindings and the end result
> > >>>> needs to be a JsCmd.
> >
> > >>>> So I'm trying to do something like:
> >
> > >>>> JsCmds.Run("$(" + theFormNodeSeq.toString + ").dialog()")
> >
> > >>>> But I need to address escaping issues with the HTML and I also need
> to
> > >>>> pre-process any "<lift:… />" commands in theFormNodeSeq.
> >
> > >>>> Any advice (please)?
> >
> > >>>> --
> > >>>> You received this message because you are subscribed to the Google
> Groups "Lift" group.
> > >>>> To post to this group, send email to [email protected].
> > >>>> To unsubscribe from this group, send email to
> [email protected]<liftweb%[email protected]>
> .
> > >>>> For more options, visit this group athttp://
> groups.google.com/group/liftweb?hl=en.
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups "Lift" group.
> > > To post to this group, send email to [email protected].
> > > To unsubscribe from this group, send email to
> [email protected]<liftweb%[email protected]>
> .
> > > For more options, visit this group athttp://
> groups.google.com/group/liftweb?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<liftweb%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=en.
>
>
--
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics
--
You received this message because you are subscribed to the Google Groups
"Lift" 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/liftweb?hl=en.