首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Om的ScrollSpy

带Om的ScrollSpy
EN

Stack Overflow用户
提问于 2014-09-20 19:00:32
回答 1查看 414关注 0票数 0

我想让Om和ScrollSpy一起工作。

我目前正在使用以下代码:

代码语言:javascript
复制
(defn main-component
  [data owner]
  (om/component
    (dom/div
      #js {:className "col-sm-10 col-sm-offset-2 col-md-10 col-md-offset-2 main"}
      (dom/div
        #js {:className "main-panel"
             :data-spy "scroll"
             :data-target ".nav-sidebar"}
        "..."))))
代码语言:javascript
复制
(defn sidebar-component
  [data owner]
  (om/component
    (dom/div
      #js {:className "container-fluid"}
      (dom/div
        #js {:className "row"}
        (dom/div
          #js {:className "col-sm-2 col-md-2 sidebar"}
          (dom/div
            #js {:className "nav-sidebar"}
            (dom/ul
              #js {:className "nav"}
              (dom/li nil (dom/a #js {:href "#thing-1"} "Thing 1"))
              (dom/li nil (dom/a #js {:href "#thing-2"} "Thing 2"))
              (dom/li nil (dom/a #js {:href "#thing-3"} "Thing 3"))
              )))))))
代码语言:javascript
复制
(defn app-component
  "The top-level Om component."
  [data owner]
  (om/component
    (om/build
      (common/app-template
        (om/build sidebar-component data)
        (om/build main-component data))
      data)))

目前,它似乎一直工作到Om / React.js重新呈现DOM为止。在那之后,ScrollSpy停止工作。我想我知道为什么。根据自举ScrollSpy:“当使用滚动间谍从DOM中添加或删除元素时,需要调用如下所示的刷新方法:

代码语言:javascript
复制
$('[data-spy="scroll"]').each(function () {
  var $spy = $(this).scrollspy('refresh');
});

我该怎么办?我想我想要连接到Om并告诉它调用ScrollSpy,如上面所示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-20 23:31:26

我做了几处改变才能让它发挥作用。

首先,ScrollSpy需要绑定到滚动元素,例如主体,而不是嵌套在内部的元素。因此,我从上面显示的“主面板”(例如main-component)中删除了静态属性。接下来,我将展示如何使用脚本绑定到body元素。

其次,我为IDidMount和IDidUpdate添加了如下处理程序:

代码语言:javascript
复制
(defn app-component
  [data owner]
  (reify
    om/IDidMount
    (did-mount
      [this]
      (.log js/console "did-mount")
      (-> (js/$ "body")
          (.scrollspy #js {:target ".nav-sidebar"})))

    om/IDidUpdate
    (did-update
      [this prev-props prev-state]
      (.log js/console "did-update")
      (-> (js/$ "body")
          (.scrollspy "refresh")))

    om/IRender
    (render
      [this]
      ; ...
      )))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25952281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档