0

次のコードがあります。これは、一連のデバイスをSVGとして表すことを目的としています。

(ns foo.core
  (:use [c2.core :only [unify]]
        [c2.dom :only [replace! append!]]
        [c2.svg :only [translate]]))

(def conf 
  { :devices [{:alias "OSC Sender",
               :name "OSC Sender",
               :ins []},
              {:alias "const2", :name "const",
               :outs []}],
    :layout [{:alias "const2",
              :x 72.12447405329594,
              :y 99.88499298737729},
             {:alias "tick",
              :x 82.5732819074334,
              :y 133.91374474053296},
             {:alias "OSC Sender",
              :x 185.17741935483872,
              :y 113.90322580645162}]})

(def render-config
  [:svg {:viewBox "0 0 900 400"}
   [:rect {:id "frame" :x "1" :y "1" :width "600" :height "300" :fill "none" :stroke "blue"}]
   (unify (:layout conf)
          (fn [{alias :alias x :x y :y}]
            [:g {:transform (translate [x y])}
              [:text alias]]))])

(append! "#main" render-config)

render-configREPLで評価しようとすると、次のようになります。

[:svg {:viewBox "0 0 900 400"} [:rect {:width "600", :y "1", :x "1", :fill "none", :stroke "blue", :id "frame", :height "300"}] ([:g {:transform "translate(72,99)"} [:text "const2"]] [:g {:transform "translate(82,133)"} [:text "tick"]] [:g {:transform "translate(185,113)"} [:text "OSC Sender"]])]

これは私には適切なヒカップ表現のように見えます(確かunifyにその魔法を実行しました)。

しかし、render-config(を使用して)Webページのコンテキストで評価するとsingult、エラーが発生するだけです。非常に単純なSVG(基本的には囲んでいる「フレーム」長方形のみ)の生成はブラウザーで機能します。

ヒント/ヒントはありますか?

乾杯!

注:をrender-config使用してレンダリングしHiccup、結果をファイルに吐き出すと、Inkscapeで読み取り可能なSVG画像が得られます。

4

1 に答える 1

1

問題はあなたunifyが一人っ子ではないということです。ClojureScriptでは、unifyには「ここにあるすべての子がこのテンプレートfnを介してこれらのデータであることを確認する」というセマンティクスがあり、Singultがを(テンプレートに一致rectさせるために)に変換しようとしています。gこれは無意味であり、それが爆発している理由です。ユニファイをラップすると、次のようになります

[:g.devices (unify ...)]

あなたは大丈夫なはずです。

unifyあるかのように扱われるため、これはサーバー側で機能しmapます。

于 2012-08-10T14:48:31.603 に答える