om-sync is little more than a basic proof of concept. Pull requests that
enhance and/or extend the behavior are welcome.

On Saturday, April 26, 2014, Sven Richter <[email protected]> wrote:

> Hi,
>
> I am trying to use om-sync to update my server when something in my app
> state changes. But, whenever I do that I only send one key of my whole map
> to the server, which is useless as some metainformation such as an unique
> id is missing.
>
> I put together a small working example which shows exactly this problem.
> You can copy this into a file and after clicking a button you will see that
> the put request sends only a map with one key:
>
> (ns om-async.core
>   (:require-macros [cljs.core.async.macros :refer [go]])
>   (:require [cljs.core.async :as async :refer [put! chan alts!]]
>             [goog.dom :as gdom]
>             [om.core :as om :include-macros true]
>             [om.dom :as dom :include-macros true]
>             [om-sync.core :refer [om-sync]]
>             [om-sync.util :refer [tx-tag edn-xhr]]
>             [cljs-time.core :as cljs-time]
>             [cljs-time.format :as cljs-format]))
>
> (def test-state (atom {:releases {:url "/releases" :coll [{:keyone
> "testvalue" :keytwo "testval2"} {:keyone "testvalmap2" :keytwo
> "tesval2map2"}]}}))
>
>
> (defn test-view-deeper [app owner]
>   (reify
>     om/IRenderState
>     (render-state [_ _]
>                   (apply dom/div nil
>                            (map #(dom/button
>                               #js {:onClick (fn [e] (println "clicked
> button")
>                                             (om/transact! % :keyone (fn
> [_] "newtestval") :update))}
>                                        (:keyone %)) app)))))
>
> (defn test-view [app owner]
>   (reify
>     om/IRenderState
>     (render-state [_ _]
>                   (dom/div nil
>                         (om/build om-sync (:releases app)
>                          {:opts {:view       test-view-deeper
>                                  :filter     (comp #{:create :update
> :delete} tx-tag)
>                                  :id-key     :class/id
>                                  :on-success (fn [res tx-data] (println
> "success " res))
>                                  :on-error
>                                              (fn [err tx-data]
>                                                (println "error "))}})))))
>
>
> (let [tx-chan (chan)
>         tx-pub-chan (async/pub tx-chan (fn [_] :txs))]
>     (om/root test-view test-state
>              {:target    (gdom/getElement "test")
>               :shared    {:tx-chan tx-pub-chan}
>               :tx-listen (fn [tx-data root-cursor]
>                            (put! tx-chan [tx-data root-cursor]))}))
>
> The put request in chrome looks like this:
> Request payload: {:keyone "newtestval"}
>
> Any Ideas what is wrong here? And how to do it right?
>
> Best Regards,
> Sven
>
> --
> Note that posts from new members are moderated - please be patient with
> your first post.
> ---
> You received this message because you are subscribed to the Google Groups
> "ClojureScript" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected] <javascript:;>.
> To post to this group, send email to 
> [email protected]<javascript:;>
> .
> Visit this group at http://groups.google.com/group/clojurescript.
>

-- 
Note that posts from new members are moderated - please be patient with your 
first post.
--- 
You received this message because you are subscribed to the Google Groups 
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to