我想在Om中编写一个应用程序 - 特别是GitHub发布查看器。要从GitHub检索问题,我需要XHR请求它们,并且标记问题的行为是“已查看”#39;通过向GitHub发送请求。
关于使用当前版本的Om没有异步/ http调用的相当多的文档,以及使用Om.next的相当多的文档,但我刚刚开始并感觉像Om.next不适合完整的ClojureScript新手潜水。
是否有文档,是否有使用当前稳定版本的Om(0.8.x)和远程资源的模式,这导致这种应用程序的干净架构?在生产中使用Om的大型应用程序,如CircleCI - 是否使用Om.next?如果没有,那么普遍接受的请求模式是什么?
答案 0 :(得分:2)
CircleCI前端目前用Om编写,但是they have plans to migrate to Om.next,它们解释了原因。
关于Om,有一个专门用于"idioms and patterns"的存储库,链接自tutorial section。我不会说任何东西都是用大理石写的,准备试验一下。
答案 1 :(得分:1)
我想,你可以在om real-world example中潜水。他们使用Google Closure的XhrIo进行异步http调用。
(defn edn-xhr [{:keys [method url data on-complete]}]
(let [xhr (XhrIo.)]
(events/listen xhr goog.net.EventType.COMPLETE
(fn [e]
(on-complete (reader/read-string (.getResponseText xhr)))))
(. xhr
(send url (meths method) (when data (pr-str data))
#js {"Content-Type" "application/edn"}))))
在用户更改时通信服务器
(defn on-edit [id title]
(edn-xhr
{:method :put
:url (str "class/" id "/update")
:data {:class/title title}
:on-complete
(fn [res]
(println "server response:" res))}))
om.core/IWillMount
(defn classes-view [app owner]
(reify
om/IWillMount
(will-mount [_]
(edn-xhr
{:method :get
:url "classes"
:on-complete #(om/transact! app :classes (fn [_] %))}))
om/IRender
(render [_]
(dom/div #js {:id "classes"}
(dom/h2 nil "Classes")
(apply dom/ul nil
(map
(fn [class]
(let [id (:class/id class)]
(om/build editable class
{:opts {:edit-key :class/title
:on-edit #(on-edit id %)}})))
(:classes app)))))))
这不是你的问题的答案,但你可以深入研究