Me again - still banging my head against the wall.
I've loaded my templates, and passed my master splice function bound to the tag
"view" to renderTemplate.
This loads my page shell as expected and tried to render the content.
My main splice function is calling another function here:
templateSplice :: String -> [(B.ByteString,B.ByteString)] -> Splice MyMonad
templateSplice s p = do
c <- callTemplate (B.pack s) p
case (c) of
Just v -> return v
Nothing -> return [Text (B.pack
("oops in templateSplice while attempting to render: "
++ (show s) ++ " with parameters: " ++ (show p) ++ "\n")), Element
(B.pack "br") [] []]
and unfortunately templateSplice always returns nothing (that is, the error
message) even though I loaded all of the relevant templates at the first step.
Do you see what I am doing wrong?
Kevin
--- On Thu, 6/17/10, MightyByte <[email protected]> wrote:
> From: MightyByte <[email protected]>
> Subject: Re: [Snap Framework] renderTemplate with XML fragments in Heist
> To: "Kevin Jardine" <[email protected]>
> Cc: [email protected]
> Date: Thursday, June 17, 2010, 6:36 PM
> Yes, that's correct. Just keep
> in mind that one of our main goals is
> to promote the clean separation between view and business
> logic.
> Heist was intentionally designed to discourage putting
> business logic
> in the templates (views). This is why we didn't make
> any kind of loop
> or conditional syntax available in the templates.
> Similarly we want
> to discourage putting views inside your Haskell code.
> So while it
> might be easy to make a splice like this:
>
> myArticle post = do
> let body = [Element "span" [("class", "author")]
> [Text (getAuthor post)]
>
> ,Element "div" [("class", "postbody")] (getBody
> post)
>
> ]
> return [Element "h1" [] [Text (getTitle post)]
> ,Element
> "div" [("class", "post")] body
> ]
>
> ...we discourage this pattern of putting view details in
> your code.
> The preferred approach would be to implement this bit of
> HTML as
> another template that gets each of the individual pieces of
> data from
> bound splices.
>
> On Thu, Jun 17, 2010 at 12:13 PM, Kevin Jardine <[email protected]>
> wrote:
> > OK, thanks for the encouragement.
> >
> > I was looking at the definition of bindStrings itself
> and it occurs to me that a trivial variant would be:
> >
> > bindNodes pairs ts = foldr add ts pairs
> > where
> > add (n,v) = bindSplice n (return v)
> >
> > So perhaps I'll start with that and see where it takes
> me.
> >
> > That means that I would be rewriting my view system to
> process lists of nodes rather than strings, but the same
> flow structure would remain (at least for now).
> >
> > Kevin
> >
> > --- On Thu, 6/17/10, MightyByte <[email protected]>
> wrote:
> >
> >> From: MightyByte <[email protected]>
> >> Subject: Re: [Snap Framework] renderTemplate with
> XML fragments in Heist
> >> To: "Kevin Jardine" <[email protected]>
> >> Date: Thursday, June 17, 2010, 6:05 PM
> >> Yes, that is exactly the approach we
> >> had in mind. You could even
> >> eliminate nodeDict as a parameter and store it as
> state in
> >> MyMonad.
> >> But you wouldn't have to do that. You can
> organize it
> >> in whatever way
> >> works best for your application.
> >>
> >> On Thu, Jun 17, 2010 at 12:00 PM, Kevin Jardine
> <[email protected]>
> >> wrote:
> >> > One experiment that I'm looking at is
> defining:
> >> >
> >> > klugeSplice :: [(B.ByteString,[Node])] ->
> Splice
> >> MyMonad
> >> > klugeSplice nodeDict = do
> >> > input <- getParamNode
> >> > let name = getName input
> >> > return $ fromMaybe [Text (B.pack
> "oops")] $
> >> lookup name nodeDict
> >> >
> >> > and passing
> >> >
> >> > (klugeSplice nodeDict) as the first parameter
> to
> >> bindSplice.
> >> >
> >> > At least that function compiles but I'm
> afraid that
> >> I'm still lost in a conceptual sea so I'm not sure
> if this
> >> is anything like the best approach.
> >> >
> >> > Kevin
> >> >
> >> > --- On Thu, 6/17/10, Kevin Jardine <[email protected]>
> >> wrote:
> >> >
> >> >> From: Kevin Jardine <[email protected]>
> >> >> Subject: Re: [Snap Framework]
> renderTemplate with
> >> XML fragments in Heist
> >> >> To: [email protected]
> >> >> Date: Thursday, June 17, 2010, 5:05 PM
> >> >> To explain in more detail, I had
> >> >> thought that Heist was a "slave"
> template
> >> library.
> >> >>
> >> >> You hand it some attributes (nodes or
> strings) and
> >> a
> >> >> template name and it hands you back
> something
> >> (nodes or a
> >> >> rendered string).
> >> >>
> >> >> Currently, however, it seems as though
> Heist is
> >> the master
> >> >> app and mine ends up being the slave -
> you hand
> >> Heist a page
> >> >> shell and define some hooks and it does
> all the
> >> work and
> >> >> hands you the final string.
> >> >>
> >> >> Is that correct?
> >> >>
> >> >> If so, I'm still keen to use the library
> but will
> >> have to
> >> >> rethink how I am doing things as the work
> flow is
> >> in essence
> >> >> in the reverse order of what I am used
> to.
> >> >>
> >> >> Kevin
> >> >>
> >> >> --- On Thu, 6/17/10, Kevin Jardine <[email protected]>
> >> >> wrote:
> >> >>
> >> >> > From: Kevin Jardine <[email protected]>
> >> >> > Subject: Re: [Snap Framework]
> renderTemplate
> >> with XML
> >> >> fragments in Heist
> >> >> > To: "MightyByte" <[email protected]>
> >> >> > Date: Thursday, June 17, 2010, 4:34
> PM
> >> >> > Thanks for your patience here!
> >> >> >
> >> >> > I am still running into a
> conceptual
> >> difficulty here
> >> >> as I
> >> >> > want to pass around a
> dictionary/map
> >> structure of some
> >> >> kind
> >> >> > of attribute value pairs.
> >> >> >
> >> >> > Eg. [(String, [Node])] or
> [(String,String)]
> >> which I
> >> >> can
> >> >> > manipulate in my own monad and then
> pass to
> >> Heist when
> >> >> and
> >> >> > if I choose.
> >> >> >
> >> >> > But bindSplice takes a function
> where I would
> >> want a
> >> >> > dictionary.
> >> >> >
> >> >> > I am obviously lacking in
> Heist-foo.
> >> >> >
> >> >> > What to do?
> >> >> >
> >> >> > Kevin
> >> >> >
> >> >> > --- On Thu, 6/17/10, MightyByte
> <[email protected]>
> >> >> > wrote:
> >> >> >
> >> >> > > From: MightyByte <[email protected]>
> >> >> > > Subject: Re: [Snap Framework]
> >> renderTemplate with
> >> >> XML
> >> >> > fragments in Heist
> >> >> > > To: "Kevin Jardine" <[email protected]>
> >> >> > > Date: Thursday, June 17, 2010,
> 3:55 PM
> >> >> > > Yeah, this was our intent.
> >> >> > > renderTemplate is the only way
> to get
> >> >> > > things out of TemplateMonad.
> By using
> >> >> bindSplice as
> >> >> > I
> >> >> > > mentioned
> >> >> > > above, you keep your data is
> structured
> >> nodes
> >> >> when
> >> >> > > possible.
> >> >> > > bindStrings is only intended as
> a
> >> convenient way
> >> >> to
> >> >> > pass
> >> >> > > strings into
> >> >> > > templates.
> >> >> > >
> >> >> > > On Thu, Jun 17, 2010 at 9:47
> AM, Kevin
> >> Jardine
> >> >> <[email protected]>
> >> >> > > wrote:
> >> >> > > > Or am I making a
> conceptual error
> >> here?
> >> >> > > >
> >> >> > > > Perhaps I should be using
> >> runTemplate to get
> >> >> the
> >> >> > XML
> >> >> > > fragments and only use
> renderTemplate at
> >> the very
> >> >> top
> >> >> > > level?
> >> >> > > >
> >> >> > > > This would keep the input
> as
> >> structured
> >> >> nodes
> >> >> > and
> >> >> > > convert to bytestrings only at
> the last
> >> step.
> >> >> > > >
> >> >> > > > Kevin
> >> >> > > >
> >> >> > > > --- On Thu, 6/17/10, Kevin
> Jardine
> >> <[email protected]>
> >> >> > > wrote:
> >> >> > > >
> >> >> > > >> From: Kevin Jardine
> <[email protected]>
> >> >> > > >> Subject:
> renderTemplate with
> >> XML
> >> >> fragments
> >> >> > in
> >> >> > > Heist
> >> >> > > >> To: [email protected]
> >> >> > > >> Date: Thursday, June
> 17, 2010,
> >> 3:38 PM
> >> >> > > >> If I call
> >> >> > > >>
> >> >> > > >> renderTemplate
> (bindStrings
> >> dict
> >> >> > > emptyTemplateState)
> >> >> > > >> templateName
> >> >> > > >>
> >> >> > > >> this works fine if the
> dict
> >> values are
> >> >> all
> >> >> > > unstructured
> >> >> > > >> data.
> >> >> > > >>
> >> >> > > >> However, if they are
> XML
> >> structures,
> >> >> the
> >> >> > resulting
> >> >> > > HTML is
> >> >> > > >> escaped, presumably
> because
> >> bindStrings
> >> >> > inserts
> >> >> > > them as Text
> >> >> > > >> nodes.
> >> >> > > >>
> >> >> > > >> What function instead
> of
> >> bindStrings do
> >> >> I
> >> >> > call to
> >> >> > > insert
> >> >> > > >> XML fragments?
> >> >> > > >>
> >> >> > > >> Kevin
> >> >> > > >>
> >> >> > > >>
> >> >> > > >>
> >> >> > > >>
> >> >> > > >
> >> >> > > >
> >> >> > > >
> >> >> > > >
> >> >>
> _______________________________________________
> >> >> > > > Snap mailing list
> >> >> > > > [email protected]
> >> >> > > > http://mailman-mail5.webfaction.com/listinfo/snap
> >> >> > > >
> >> >> > >
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >>
> >> >>
> >> >>
> >> >>
> >> >
> >> >
> >> >
> >> >
> _______________________________________________
> >> > Snap mailing list
> >> > [email protected]
> >> > http://mailman-mail5.webfaction.com/listinfo/snap
> >> >
> >>
> >
> >
> >
> > _______________________________________________
> > Snap mailing list
> > [email protected]
> > http://mailman-mail5.webfaction.com/listinfo/snap
> >
>
_______________________________________________
Snap mailing list
[email protected]
http://mailman-mail5.webfaction.com/listinfo/snap