8

这就是我所拥有的:

(defn view [cursor owner]
  (reify
    om/IDidMount
    (did-mount [_]
      (-> (js/$ ".dropdown-toggle")
          (.dropdown)))

    om/IRender
    (render [_]
      (dom/div #js {:className "dropdown"}
               (dom/button #js {:className "btn btn-default dropdown-toggle"
                                :type "button"
                                :id "dropdownMenu1"} "Dropdown" (dom/span #js {:className "caret"}))
               (dom/ul #js {:className "dropdown-menu"
                            :role "menu"
                            :ariaLabelledby "dropdownMenu1"}
                       (dom/li #js {:role "presentation"}
                               (dom/a #js {:role "menuitem"
                                           :tabIndex "-1"
                                           :href "#"} "Action"))
                       (dom/li #js {:role "presentation"}
                               (dom/a #js {:role "menuitem"
                                           :tabIndex "-1"
                                           :href "#"} "Another action")))))))

问题是,一旦打开下拉列表,它就不会再隐藏了,因为它应该是单击它或其他地方时的样子。击键也不起作用。我相信这里遗漏了一些重要的东西,它可能是什么?我正在使用引导程序 3.1.1 和 jquery 1.11.0。

谢谢。

4

2 回答 2

8

这是我创建下拉组件的方法:

(defn dropdown [cursor owner {:keys [id text values]}]
 (om/component
   (html
     [:div.dropdown
       [:button {:type "button"
                 :class "btn dropdown-toggle"
                 :data-toggle "dropdown"
                 :id id}
                text
                [:span {:class "caret"}]]
       [:ul {:class "dropdown-menu" :role "menu" :aria-labelledby id}
         [:li {:role "presentation"}
           (for [v values] 
             [:a {:role "menuitem" :tabIndex "-1" :href "#"} v])]]])))

它应该隐藏的时候。为了清楚起见,我使用 jQuery 1.11.1、Bootstrap 3.2.0 和sablono,但这不会影响任何事情。我认为您不应该将 IDidMount 用于 jQuery,因为所有交互都是通过 bootstrap 的下拉 JavaScript 插件(包含在 Bootstrap 库中)处理的。

于 2014-07-13T12:05:58.110 回答
4

另一种选择是使用我编写的Om-Bootstrap库;有一个下拉组件可以在内部为您处理所有这些状态。

下拉列表变为:

(:require [om-bootstrap.button :as b])

(b/toolbar
 {}
 (for [title ["Default" "Primary" "Success" "Info" "Warning" "Danger" "Link"]
       :let [style (.toLowerCase title)]]
   (b/dropdown {:bs-style style, :title title}
               (b/menu-item {:key 1} "Action")
               (b/menu-item {:key 2} "Another action")
               (b/menu-item {:key 3} "Something else here")
               (b/menu-item {:divider? true})
               (b/menu-item {:key 4} "Separated link"))))

http://om-bootstrap.herokuapp.com上的文档站点提供了如何使用所有这些组件的示例和代码片段。

于 2014-12-10T16:46:17.970 回答