ClojureScript/Om:呈现的HTML缺少属性

ClojureScript/Om:呈现的HTML缺少属性,clojure,clojurescript,om,Clojure,Clojurescript,Om,我有一个非常简单的ClojureScript/Om应用程序。好像有点破了 这是核心文件: (ns demo.core (:require-macros [cljs.core.async.macros :refer [go]]) (:require [goog.events :as events] [cljs.core.async :as async :refer [>! <! put! chan]] [om.core :as o

我有一个非常简单的ClojureScript/Om应用程序。好像有点破了

这是核心文件:

(ns demo.core
  (:require-macros [cljs.core.async.macros :refer [go]])
  (:require [goog.events :as events]
            [cljs.core.async :as async :refer [>! <! put! chan]]
            [om.core :as om :include-macros true]
            [om.dom :as dom :include-macros true]
            [goog.events.EventType :as EventType]
            [clojure.string :as string]))

(defn layout
  [app owner]
  (reify
    om/IRender
    (render [_]
      (dom/div {:id "some-id"} "Pumpkin"))))

(defn main []
  (om/root
    layout
    {}
    {:target (. js/document (getElementById "app"))}))
它呈现以下HTML:

<div id="app">
    <div data-reactid=".0">Pumpkin</div>
</div>
为什么div没有id some id?

您需要使用js{}reader文本来指定js对象,而不是普通的旧映射:

(dom/div #js {:id "some-id"} "Pumpkin")
这在。

中有详细说明。您需要使用js{}reader文本来指定js对象,而不是普通的旧映射:

(dom/div #js {:id "some-id"} "Pumpkin")

这一点在文章中有详细阐述。

好的,我相信。。。但是如何设置任意的非js属性呢?我有一些来自另一个项目的代码,它不需要js来工作,可以使用{:classfoo}而不是{:className foo},而且看起来很好。显然,我不太明白发生了什么,所以看不出区别。有什么提示吗?@sirrort您没有设置“JS属性”。js{}只是创建了一个JavaScript对象,而不是ClojureScript映射;这是,不是。这是必需的,因为它直接传递到React,React只理解JS对象,而不理解CLJS映射。您可以阅读更多信息。@SirRobert说,我不知道为什么{:class foo}在您的另一个项目中工作。可能是Om专门处理了我没有测试过的东西,也可能是使用了an,我知道发生了什么。在另一个项目中,他们使用的是[om-tools.dom:as-dom],而不是[om.dom:as-dom]。很明显,om工具为这类东西提供了一些糖。好吧,我买那个。。。但是如何设置任意的非js属性呢?我有一些来自另一个项目的代码,它不需要js来工作,可以使用{:classfoo}而不是{:className foo},而且看起来很好。显然,我不太明白发生了什么,所以看不出区别。有什么提示吗?@sirrort您没有设置“JS属性”。js{}只是创建了一个JavaScript对象,而不是ClojureScript映射;这是,不是。这是必需的,因为它直接传递到React,React只理解JS对象,而不理解CLJS映射。您可以阅读更多信息。@SirRobert说,我不知道为什么{:class foo}在您的另一个项目中工作。可能是Om专门处理了我没有测试过的东西,也可能是使用了an,我知道发生了什么。在另一个项目中,他们使用的是[om-tools.dom:as-dom],而不是[om.dom:as-dom]。显然,om工具为这类事情提供了一些支持。