使用与嗡

问题描述:

引导下拉这是我有:使用与嗡

(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"))))))) 

的问题是,一旦下拉被打开,它不会再隐藏了当一个点击,或在其他地方也是应该的。另外击键不起作用。我相信在这里失去一些重要的东西,它会是什么?我使用bootstrap 3.1.1和jQuery 1.11.0。

谢谢。

这就是我做的创建一个下拉组件:

(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,但这不影响任何内容。我认为你不应该为jQuery使用IDidMount,因为所有的交互都是通过bootstrap的下拉JavaScript插件(它包含在Bootstrap库中)处理的。

+0

谢谢安娜!你说得对,我不需要IDidMount。但是我也一直在做错事。遵循ReactJs的约定,我试着用:dataToggle而不是:data-toggle。这就是为什么我依靠JavaScript而不是数据属性(因此IDidMount)... – roboli

+1

Om世界中的一切都是烤肉串案例:-) –

+0

@AnnaPawlicka不太“全部”是kebab-case :::className和:onClick(虽然我使用om-tools,它可以让我编写:class和:on-click :-P) – Dan

另一种选择是使用我编写的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有例子,如何使用所有这些组件的代码段。