Om-next 远程同步教程 send-to-chan
Om-next Remote Sync Tutorial send-to-chan
我可能做错了什么,但我相信其中一个 om-next tutorials has some issues; specifically the autocomplete example. I was able to figure out one of the issues 但还有另一个问题导致我遇到一些问题。
一旦我在自动补全的输入框中输入了两个以上的字母,如下代码:
(defn send-to-chan [c]
(fn [{:keys [search]} cb]
(when search
(let [{[search] :children} (om/query->ast search)
query (get-in search [:params :query])]
(put! c [query cb])))))
产生以下错误:
Uncaught TypeError: Cannot read property 'call' of undefined
core.js?zx=3jufl8vymlgw [452] om_tutorial.core.send_to_chan
next.js [3034] om.next.Reconciler.om$next$protocols$IReconciler$send_BANG_$arity
protocols.js [303] om$next$protocols$send_BANG_
next.js [1656] anonymous
我不知道为什么会这样。
如有任何帮助,我们将不胜感激。
不确定这是否是正确的做事方式,但这就是我为解决这个问题所做的。
- 从 github 结帐。 (https://github.com/omcljs/om)
- cd om
- 安装
现在最新的 om 可以在您的系统上使用了。 (你不能只把它放在你的项目文件中,因为它还没有在 https://clojars.org/repo/ 上)。
- 现在我认为这是我感到困惑的地方。早些时候在
教程,在 auto-correction 示例之前;有一个项目文件
用
[org.omcljs/om "1.0.0-alpha23"]
定义的。然后当
auto-correction 例子出来了,我用的是同一个项目
配置,因为没有提到如何配置
项目文件再次。事实证明,你必须使用
[org.omcljs/om "1.0.0-alpha29"]
.
一旦发生这种情况,尽管我收到以下警告,但一切正常。
Warning: Each child in an array or iterator should have a unique "key" prop. Check the render method of `om_tutorial$core$AutoCompleter`. See https://fb.me/react-warning-keys for more information.
那将是另一天的战斗。
顺便说一句。
由于我原来用的是旧版本的om,安装新的并没有解决问题。 lein clean
也没有解决问题。我不得不手动删除我的 om-tutorial/resources/public/js
文件夹。然后运行lein run -m clojure.main script/figwheel.clj
.
每个 child 数组需要 "key" 属性的错误与 React 的关系比与 Om 的关系更大。 React 要求每个子组件都有一个唯一的 id。
如果您迭代工厂方法,它不会自动为每个子组件生成新的 ID。您必须指定一个键函数:
(def app-state
(atom {:items [{:id 1
:title "Foo"}
{:id 2
:title "Foo"}]}
(defui Item
static om/IQuery
(query [this] [:id :title])
Object
(render [this]
(dom/li nil (:title (om/props this))))
;; Specify key function as follows
(def item (om/factory Item {:keyfn :id})
(defui List
static om/IQuery
(query [this] [{:items (om/get-query Item)}])
Object
(render [this]
(dom/ul nil (map item (:items (om/props this)))))
关键函数不必 return 一个数字,但它确实必须 return 某种被迭代的每个项目的唯一标识信息(在这种情况下,标题不是)。
顺便说一下,您也可以使用 map-indexed
生成一个数字以输入关键函数,或者使用随机数生成器。
我认为问题出在 om。next/query->ast 未在 1.0.0-alpha23 中定义——这是调用未定义错误的来源。
这是一个棘手的解决方法:
(defn send-to-chan [c]
(fn [{:keys [search] :as x} cb]
(when search ;; e.g. [(:search/results {:query "xxx"})]
(let [query (-> search first second :query)]
(put! c [query cb])))))
我可能做错了什么,但我相信其中一个 om-next tutorials has some issues; specifically the autocomplete example. I was able to figure out one of the issues 但还有另一个问题导致我遇到一些问题。
一旦我在自动补全的输入框中输入了两个以上的字母,如下代码:
(defn send-to-chan [c]
(fn [{:keys [search]} cb]
(when search
(let [{[search] :children} (om/query->ast search)
query (get-in search [:params :query])]
(put! c [query cb])))))
产生以下错误:
Uncaught TypeError: Cannot read property 'call' of undefined
core.js?zx=3jufl8vymlgw [452] om_tutorial.core.send_to_chan
next.js [3034] om.next.Reconciler.om$next$protocols$IReconciler$send_BANG_$arity
protocols.js [303] om$next$protocols$send_BANG_
next.js [1656] anonymous
我不知道为什么会这样。
如有任何帮助,我们将不胜感激。
不确定这是否是正确的做事方式,但这就是我为解决这个问题所做的。
- 从 github 结帐。 (https://github.com/omcljs/om)
- cd om
- 安装
现在最新的 om 可以在您的系统上使用了。 (你不能只把它放在你的项目文件中,因为它还没有在 https://clojars.org/repo/ 上)。
- 现在我认为这是我感到困惑的地方。早些时候在
教程,在 auto-correction 示例之前;有一个项目文件
用
[org.omcljs/om "1.0.0-alpha23"]
定义的。然后当 auto-correction 例子出来了,我用的是同一个项目 配置,因为没有提到如何配置 项目文件再次。事实证明,你必须使用[org.omcljs/om "1.0.0-alpha29"]
.
一旦发生这种情况,尽管我收到以下警告,但一切正常。
Warning: Each child in an array or iterator should have a unique "key" prop. Check the render method of `om_tutorial$core$AutoCompleter`. See https://fb.me/react-warning-keys for more information.
那将是另一天的战斗。
顺便说一句。
由于我原来用的是旧版本的om,安装新的并没有解决问题。 lein clean
也没有解决问题。我不得不手动删除我的 om-tutorial/resources/public/js
文件夹。然后运行lein run -m clojure.main script/figwheel.clj
.
每个 child 数组需要 "key" 属性的错误与 React 的关系比与 Om 的关系更大。 React 要求每个子组件都有一个唯一的 id。
如果您迭代工厂方法,它不会自动为每个子组件生成新的 ID。您必须指定一个键函数:
(def app-state
(atom {:items [{:id 1
:title "Foo"}
{:id 2
:title "Foo"}]}
(defui Item
static om/IQuery
(query [this] [:id :title])
Object
(render [this]
(dom/li nil (:title (om/props this))))
;; Specify key function as follows
(def item (om/factory Item {:keyfn :id})
(defui List
static om/IQuery
(query [this] [{:items (om/get-query Item)}])
Object
(render [this]
(dom/ul nil (map item (:items (om/props this)))))
关键函数不必 return 一个数字,但它确实必须 return 某种被迭代的每个项目的唯一标识信息(在这种情况下,标题不是)。
顺便说一下,您也可以使用 map-indexed
生成一个数字以输入关键函数,或者使用随机数生成器。
我认为问题出在 om。next/query->ast 未在 1.0.0-alpha23 中定义——这是调用未定义错误的来源。
这是一个棘手的解决方法:
(defn send-to-chan [c]
(fn [{:keys [search] :as x} cb]
(when search ;; e.g. [(:search/results {:query "xxx"})]
(let [query (-> search first second :query)]
(put! c [query cb])))))