2015-02-03 3 views
1

간단한 ClojureScript/Om 응용 프로그램이 있습니다. 조금 부러진 것 같습니다.ClojureScript/Om : 렌더링 된 HTML에 특성이 없습니다.

<div id="app"> 
    <div data-reactid=".0">Pumpkin</div> 
</div> 

가 왜 div이 ID #some-id을 가지고 있지 않습니다

(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을 렌더링 :

이 코어 파일입니까?

답변

4

당신은 평범한 오래된지도보다는 JS 객체를 지정합니다 #js {} 독자 문자를 사용해야합니다 :

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

이것은 Om Tutorial에 조금 정교합니다.

+0

좋아, 그걸 사 ...하지만 임의의 비 js 속성을 어떻게 설정합니까? 나는 #js가 필요하지 않고 {: className "foo"} 대신 {: class "foo"}를 사용할 수있는 다른 프로젝트의 코드를 가지고 있습니다. 명백하게 나는 그 구별을보기에 충분하게 잘 일어나지 않는지 이해하지 못한다. 어떤 팁? –

+0

@SirRobert "JS 속성"을 설정하지 않았습니다. '#js {}'는 Clojure (Script) 맵보다는 JavaScript 객체를 생성합니다. 이것은 옴이 아니라 [ClojureScript의 일부] (http://dev.clojure.org/jira/browse/CLJS-717)입니다. 이것은 React에 곧바로 전달되기 때문에 필요합니다. CLASS 맵이 아닌 JS 오브젝트 만 이해합니다. 자세한 정보는 [React 's supported DOM attributes] (https://facebook.github.io/react/docs/tags-and-attributes.html#html-attributes)를 참조하십시오. –

+0

@SirRobert 즉,'{: class "foo"} "가 다른 프로젝트에서 왜 작동했는지 모르겠습니다. 그것은 옴 (Om) 핸들/특별히 (내가 이것을 테스트하지 않은) 핸들 또는 [대체 DOM 구문] (https://github.com/omcljs/om#can-i-use-a-different- html-syntax)가 사용되었습니다. –

관련 문제