使用Noir的webapp:如何在不诉诸javascript的情况下显示相关的下拉菜单

时间:2012-05-30 13:45:59

标签: javascript web-applications clojure noir

我正在尝试使用Noir编写一个简单的Web应用程序,该应用程序具有一系列内容更改的下拉菜单,具体取决于在上一个下拉菜单中选择的内容。然后将这些选项作为表单提交。虽然网上有很多关于如何使用直接javascript进行此操作的信息,但我更愿意坚持使用Clojure。我使用的是Noir 1.2.1和Hiccup 0.3.6。

我目前的尝试看起来像这样(fh是hiccup.form-helpers:

(defpage "/run-experiment" []
  (common/layout 
    (fh/form-to [:post "/run-experiment"]
      (fh/label "dd1" "Drop Down 1:")
      (fh/drop-down :opts1 '(Opt1A Opt1B) 'Opt1A)
      (fh/label "dd2" "Drop Down 2:")
      (fh/drop-down :opts2 (cond (= 'Opt1A (get-opt1)) '(Opt2A1 Opt2A2)
                                 (= 'Opt1B (get-opt1)) '(Opt2B1 Opt2B2))))))

(而不是cond,我用地图实现上面的内容,但是现在我虽然这更清楚了)

我希望能够获得第一个下拉列表中所选元素的文本值,并根据该值显示第二个元素的html。我试图弄清楚是否有一种方法,使用Hiccup来生成onclick参数所需的Javascript,我需要添加到第一个下拉列表中。此外,我试图弄清楚是否有一种方法可以访问表单中其他元素的id值,这样我就可以在生成的Javascript / HTML中链接它们。理想情况下,我希望能有类似Hiccup为HTML做的事情,但对于Javascript。我认为Clojurescript可能是一个很好的候选人,但似乎它可能比我正在寻找的更多。我想我想要的是一个轻量级库,它可以生成一系列常见的Javascript任务,可以与Hiccup一起使用。

1 个答案:

答案 0 :(得分:0)

我知道这很难看,但你可以用hiccup插入javascript作为字符串文字:

(hiccup.element/javascript-tag "alert(\"hello world\")")

但是为什么不写js ..