首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用宏生成Om组件

使用宏生成Om组件
EN

Stack Overflow用户
提问于 2015-06-03 02:31:12
回答 1查看 80关注 0票数 1

我试图使用宏生成一系列类似的Om组件(例如,包含公共样板和动态“主体”的模态元素)。

我已经找到了下面的解决方案,大部分都是有效的。一个异常是访问表单的owner事件处理程序中的适当on-submit

代码语言:javascript
复制
;; macros.clj
(defmacro build-modal
  ([disp-name body]
  `(fn [_# owner#]
    (reify
      om.core/IRender
      (~'render [_#]
                (dom/div {:class "login-view-modal"}
                         (dom/div {:class "login-view-modal-backsplash"})
                         (dom/div {:class "login-view-modal-content"}
                                  ~@body))))) nil))

;; ui.cljs
(defn login-view-modal []
  (bs-macros/build-modal 
    "login-modal" 
    '(dom/form {:on-submit (fn [event] 
                            (.preventDefault event)
                            (let [username (get-value owner "username")
                                  password (get-value owner "password")
                                  data {:email_address username
                                        :password password}]
                              (handle-login-view-modal-form-submit data)))}
                            ;; elided for brevity
                            (dom/div 
                              (dom/button "LOG IN")))))

(defcomponent home-page-view [app owner]
              (init-state [_] {:text ""})
              (render-state [this state]
                              ;; elided for brevity 
                              (dom/div (login-view-modal))))

模型按预期的方式呈现,但是,在提交表单时,出现了错误:Uncaught TypeError: Cannot read property 'getDOMNode' of undefined,这似乎是因为owner不在作用域内。(注意,此元素及其事件处理程序在完整构造时按预期运行-即不使用宏)。

如何将适当的owner提供给宏的主体?

EN

回答 1

Stack Overflow用户

发布于 2015-06-03 03:16:59

您需要变量捕获才能工作。与通过owner#生成唯一符号的gen-syming不同的是,只要您想要引用它,只要内联~'owner即可。

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

https://stackoverflow.com/questions/30609846

复制
相关文章

相似问题

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