Clojurescript this-作为宏指向全局对象

时间:2013-12-15 17:35:36

标签: clojurescript reactjs

在clojurescrtipt中编写reactjs教程期间,我发现this-as宏编译为

(function(){var t = this; return t;}

总是指向反应类内的窗口。有时我可以通过js* this解决此问题,但不能在letmap内解决这个问题,因为它们也会编译为函数。

如何在this表单中访问js let

小提琴上的情况:http://jsfiddle.net/VkebS/57/

和一篇FYI教程:

(def comment-list 
  (React/createClass 
   #js{:render 
       (fn [] (dom/div #js {:className "commentList"}
                       (let [d (this-as t (.. t -props -data))]
                         (map #(commnt #js {:author (:author %)} (:text %)) d))))}))

PS:我可以将原生数组用于数据和原生地图功能

(def comment-list 
  (React/createClass 
   #js{:render 
       (fn [] (dom/div #js {:className "commentList"}
                       (.map (.. (js* "this") -props -data) #(commnt #js {:author (:author %)} (:text %)))))}))

有效,但......

1 个答案:

答案 0 :(得分:3)

this-as如果您在render函数的开头使用它

,则有效
(def commnt
  (React/createClass
   #js {:render
        (fn []
          (this-as this
                   (dom/div #js {:className "comment"}
                            (dom/h2 #js {:className "commentAuthor"}
                                    (.. this -props -author))
                            (dom/span #js {:dangerouslySetInnerHTML
                                           #js{:__html
                                               (.makeHtml converter (..  (js* "this") -props -children toString))}}))))}))

另见:https://github.com/swannodette/om/blob/master/src/om/dom.cljs#L34