首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当更新时,Om参考游标不重新呈现组件。

当更新时,Om参考游标不重新呈现组件。
EN

Stack Overflow用户
提问于 2015-08-19 14:21:09
回答 1查看 129关注 0票数 0
代码语言:javascript
复制
(ns ^:figwheel-always refs-test.core
(:require [om.core :as om :include-macros true]
          [om.dom :as dom :include-macros true]
          [sablono.core :as html :refer-macros [html]]))

(enable-console-print!)

(def app-state
  (atom {:items [{:text "cat"}
             {:text "dog"}
             {:text "bird"}]
     :selected-item {}}))

(defn selected-item []
  (om/ref-cursor (:selected-item (om/root-cursor app-state))))

(defn
  selected-item-title
  [_ owner]
  (reify
    om/IRender
    (render [_]
      (html
        [:div
        (let [selected (om/observe owner (selected-item))]
          (if (empty? selected)
            [:h1 "Nothing selected"]
            [:h1 (:text selected)]))]))))

 (defn
  selected-item-button
  [item owner]
  (reify
     om/IRender
    (render [_]
      (html
       [:li
        [:button {:on-click
                  (fn []
                    (om/update! (om/root-cursor app-state) :selected-item item)                      ;; this doesn't update
                    ;;(om/update! (om/root-cursor app-state) :selected-item (merge item {:foo 1}))   ;; this does
                  )} (:text item)]]))))

(defn
  root
  [cursor owner]
  (reify
    om/IRender
    (render [_]
      (html
       [:div
        (om/build selected-item-title {})
        [:ul
         (om/build-all selected-item-button (:items cursor))]]))))


    (om/root root app-state
      {:target (.getElementById js/document "app")})

(https://www.refheap.com/108491)

(selected-item)函数将创建一个参考游标,用于跟踪app-state中的:selected-item键。当您单击一个selected-item-button时,标题会发生变化,以反映已放入映射中的新值。然而,这只起了一次作用。按下另一个按钮不会导致标题再次呈现,所以标题总是停留在您按下的第一个按钮的值。

虽然,简单地添加一个带有额外关键字的merge似乎会使它工作.(与空地图合并也不起作用,尝试过!)

我对裁判游标的理解是错误的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-19 14:33:38

所以,这个问题很简单。

代码语言:javascript
复制
(om/update! (om/root-cursor app-state) :selected-item item)

应该是

代码语言:javascript
复制
(om/update! (om/root-cursor app-state) :selected-item @item)

注意该项,因为它是一个游标,因此是取消引用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32098177

复制
相关文章

相似问题

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