首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我得到"No protocol method INotify.-notify!“当调用update时!或者交易!在游标上?

为什么我得到"No protocol method INotify.-notify!“当调用update时!或者交易!在游标上?
EN

Stack Overflow用户
提问于 2016-02-18 03:02:15
回答 1查看 776关注 0票数 1

当使用om时(在om-next之前),当我试图在渲染阶段之外进行更新时,我得到了一个错误:

代码语言:javascript
复制
cljs.user=> (require '[om.core :as om :include-macros true])
cljs.user=> (def state (atom {:foo {:bar true}}))
#'cljs.user/state
cljs.user=> (def state-cursor (om/root-cursor state))
#'cljs.user/state-cursor
cljs.user=> (om/update! state-cursor [:foo :bar] false)
#object[Error Error: No protocol method INotify.-notify! defined for type cljs.core/Atom: [object Object]]

Error: No protocol method INotify.-notify! defined for type cljs.core/Atom: [object Object]
    at cljs$core$missing_protocol (http://localhost:10555/js/out/cljs/core.js:290:9)
    at om$core$_notify_BANG_ (http://localhost:10555/js/out/om/core.js:841:34)
    at om$core$notify_STAR_ (http://localhost:10555/js/out/om/core.js:2518:30)
    at om$core$transact_STAR_ (http://localhost:10555/js/out/om/core.js:1070:29)
    at om.core.MapCursor.om$core$ITransact$_transact_BANG_$arity$4 (http://localhost:10555/js/out/om/core.js:2042:31)
    at om$core$_transact_BANG_ (http://localhost:10555/js/out/om/core.js:770:15)
    at Function.om.core.transact_BANG_.cljs$core$IFn$_invoke$arity$4 (http://localhost:10555/js/out/om/core.js:4074:32)
    at om$core$transact_BANG_ (http://localhost:10555/js/out/om/core.js:4044:31)
    at Function.om.core.update_BANG_.cljs$core$IFn$_invoke$arity$3 (http://localhost:10555/js/out/om/core.js:4135:31)
    at om$core$update_BANG_ (http://localhost:10555/js/out/om/core.js:4105:29)

我希望这会将state原子更新为(atom {:foo {:bar false}}),而不是错误:Error: No protocol method INotify.-notify! defined for type cljs.core/Atom。我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2016-02-18 03:02:15

问题是,在将根游标传递给om/transact!om/update!之前,我需要在根游标上调用(om/ref-cursor)。这样做解决了我的问题:

代码语言:javascript
复制
cljs.user=> (def state (atom {:foo {:bar true}}))
#'cljs.user/state
cljs.user=> (def state-cursor (om/root-cursor state))
#'cljs.user/state-cursor
cljs.user=> (om/update! (om/ref-cursor state-cursor) [:foo :bar] false)
nil
cljs.user=> state
#object [cljs.core.Atom {:val {:foo {:bar false}}}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35465414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档