I just hit this issue myself and wrote a macro to make it a bit easier to
extend google-closure provided classes. Here's the code:
(ns move.macros
(:require [cljs.compiler :as compiler]
[cljs.core :as cljs]))
(defmacro goog-extend [type base-type ctor & methods]
`(do
(defn ~type ~@ctor)
(goog/inherits ~type ~base-type)
~@(map
(fn [method]
`(set! (.. ~type -prototype ~(to-property (first method)))
(fn ~@(rest method))))
methods)))
And here's the macro in action. I'm extending TreeControl so that I can
intercept when the user presses ENTER on an item in the tree:
(ns move.views
(:use-macros [move.macros :only [goog-extend]]
[cljs.core :only [this-as]])
(goog-extend
MyTree goog/ui.tree.TreeControl
([name config]
(this-as this
(goog/base this name config)))
(handleKeyEvent
[e]
(this-as this
(goog/base this "handleKeyEvent" e)
(let [view (.-hiddenView this)]
(when (#{(.-ENTER goog/events.KeyCodes)
(.-MAC_ENTER goog/events.KeyCodes)} (.-keyCode e))
(events/fire [:edit view] (get-selected-index this))
(.preventDefault e))))))
(defn- make-list-view [name]
(let [config goog/ui.tree.TreeControl.defaultConfig
tree (MyTree. name config)]
tree))
On Sunday, July 1, 2012 9:08:27 PM UTC-4, David Nolen wrote:
>
> On Fri, Jun 29, 2012 at 9:08 AM, Danny O' Connor <[email protected]>
> wrote:
> > Hello,
> >
> > I'm trying to build an user interface in Clojurescript using the Google
> > Closure library.
> >
> > It appears that the idiomatic way to use the goog.ui package is to
> create
> > subclasses of goog.ui.Component.
> >
> > Firstly, is this possible in Clojurescript ? This kind of approach
> doesn't
> > appear to work:
> >
> > (defrecord EchoComponent [text]
> > goog.ui.Component
> > (render [] text))
>
> That won't work. You'll need to write CLJS that is equivalent to JS
> for doing what GClosure expects.
>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en