在clojurescrtipt中编写reactjs教程期间,我发现this-as
宏编译为
(function(){var t = this; return t;}
总是指向反应类内的窗口。有时我可以通过js* this
解决此问题,但不能在let
或map
内解决这个问题,因为它们也会编译为函数。
如何在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 %)))))}))
有效,但......
答案 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