我想用Om编写一个应用程序,特别是一个GitHub问题查看器。要从GitHub检索问题,我需要XHR请求它们,通过将请求发送回GitHub来将问题标记为“查看”。
关于在没有异步/http调用的情况下使用当前版本的Om有相当多的文档,使用Om.next的文档也比较多,但是我才刚刚开始,我觉得Om.next不是一个完整的ClojureScript新手可以深入研究的地方。
是否有文档和模式将当前稳定版本的Om (0.8.x)与远程资源一起使用,从而为这类应用程序提供了一个干净的架构?在生产中使用Om的大型应用程序,比如CircleCI --它们使用的是Om.next吗?如果没有,常见的请求模式是什么?
发布于 2016-02-04 09:12:15
我想,你可以跳到om的现实世界的例子里。他们正在使用谷歌闭包的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)))))))这不是您的问题的答案,但您可以深入研究om示例。
https://stackoverflow.com/questions/35121004
复制相似问题