问题标签 [om]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
670 浏览

node.js - 如何在 Node.js 上运行 ClojureScripts Om?

我正在尝试确定是否可以在 Node.js 上使用 Om 来生成 HTML。我已经能够让ClojureScript 在 Node.js 上运行,并且显然React 可以在 Node.js 上运行。我按照基本指南创建了一个 Leiningen 项目

修改project.clj文件启动如下

并将 core.cljs 更改为

项目使用以下命令编译成功

但是当我尝试从 Windows cmd shell 运行生成输出时

我明白了

我认为未定义的 React 对象应该来自 ...\om-tut\out\react.inc.js 文件,该文件存在并且应该在生成的 om_tut.js 文件的第 37532 行加载

关于可能出了什么问题的任何想法?

0 投票
1 回答
123 浏览

clojure - 不同 html 上的 Clojurescript OM 目标元素

所以我开始学习clojurescript,我正在查看不同的教程。我无法找到的一件事是在某个 html 文件上定位元素 id 来放置我的标记。

假设我有两个 html 文件,index.html 和 about.html。当 url 指向http://localhost:3449/about时,我想将下面的代码定位到 about.html 上的元素 ID“app”

代码 :

这样做的最佳方法是什么?或者也许是一个参考,所以我可以看看它。或者,也许我在这里遗漏了一些观点,也许有人可以启发我。

我也尝试过使用这个https://github.com/gf3/secretary但我不确定这是否是更好的方法,因为 url 必须有一个哈希键(http://localhost:3449/#/about)才能触发。

更新:

所以我使用了下面的答案,它确实有效,但在让它工作之前我遇到了一些问题。无论如何,有人遇到了这篇文章并使用了下面的答案,但遇到了一个未定义的问题,请检查我的最终代码。

:cljsbuild你的部分project.clj

:cljsbuild {:builds [{ :id "dev" :source-paths ["src/clj" "src/cljs"] :compiler {:output-to "resources/public/js/main.js" :output-dir "resources/public/js/out/" :optimizations :none :pretty-print true}}]}

包含 js 文件about.html

<script src="js/out/goog/base.js" type="text/javascript"></script> <script src="js/main.js" type="text/javascript"></script> <script type="text/javascript">goog.require("om_async.about");</script> <script type="text/javascript">om_async.about.init();</script>

0 投票
1 回答
521 浏览

clojurescript - 如何从 Om DIV 获取 DOM 元素?

我正在使用 Clojurescript Om,我需要访问组件中包含的其中一个 DIV 上的底层 DOM 元素(以便我可以将 offsetTop 设置为 0)。我怎样才能访问这个元素?

0 投票
2 回答
174 浏览

clojurescript - Om 如何渲染列表对象?

我正在努力理解 om 如何使用 apply 来呈现列表项,如下面的示例所示,取自 Om 教程页面。

我对 apply 的理解是它需要一个函数和一个项目列表并将该函数应用于列表。但在这个例子中,理解将转化为dom/ul应用于nil.

我不明白的事情是:

  • 为什么我申请dom/ul一个列表,我不想创建ul元素,我想创建li元素?
  • apply 如何处理此示例中发送的所有参数?
0 投票
2 回答
473 浏览

asynchronous - 如何使用 Om + Figwheel + core.async 编写可重新加载的异步代码?

我想写一个时钟应用程序之类的东西。状态基本上是一个重复递增的数字。一种方法可以在这里看到。

我遇到的问题是这不是可重新加载的代码。一旦我通过无花果轮刷新代码,增量会变得更快,因为有几件事会更新状态。

我尝试尝试各种想法(基本上是制作不同的组件来拥有 go 语句代码),但我无法想出可行的方法。

有没有人对此有一个很好的解决方案,还是我只需要在开发过程中坚持下去?

0 投票
1 回答
78 浏览

clojure - 使用宏生成 Om 组件

我正在尝试使用宏来生成一系列类似的 Om 组件(例如,包含通用样板和动态“主体”的模态元素)。

我有下面的解决方案主要工作。一个例外是owner在表单的on-submit事件处理程序中访问适当的。

模态按预期呈现,但是在提交表单时出现错误:Uncaught TypeError: Cannot read property 'getDOMNode' of undefined,这似乎是因为owner不在范围内。(注意,这个元素和它的事件处理程序在完全构造时会按预期运行——即不使用宏。)

如何使owner宏的主体可用?

0 投票
1 回答
188 浏览

clojure - 持久数据结构如何帮助使 Om 更快

Om 是 React 的 clojurescript 包装器,据说速度非常快,因为它利用了不变性。我无法理解持久数据结构如何在这里提供帮助。

我所理解的是应用程序状态是一个原子。此状态被传递给返回虚拟 DOM 节点的函数(om 组件),因此创建当前虚拟 DOM 与其先前状态之间差异的“补丁”比直接在实际 DOM 上操作要好得多。

但是持久数据结构在哪里可以提供帮助?

例如click-counter,渲染一个按钮,单击该按钮会增加计数器。所以转换函数看起来像这样:

我不明白这一点:onClick执行 clojurescript 时会创建一个新地图(非常有效),如下所示:

现在app-state指向新地图。此时 Om 知道状态已更改,因为这只是一次相等检查的问题。

这里的问题是 Om 仍然应该计算整个旧虚拟 DOM 和新虚拟 DOM 之间的差异。它不知道只是改变了计数器。

我的错误在哪里?

0 投票
1 回答
20 浏览

clojurescript - 新栗子项目:编辑应用状态不会刷新浏览器

在被 Nolen 的精彩演讲大肆宣传之后,我决定试一试 Clojurescript 和 Om。

一切都像宣传的那样工作——除了我有点惊讶的是,编辑app-state不会像编辑style.css或 Om 组件树那样刷新浏览器。

app-state我猜这是故意的,并且编辑不刷新浏览器是有充分理由的。但是,我对 ClojureScript 非常陌生,并且不太清楚该去哪里寻找答案。

任何帮助/见解表示赞赏!

0 投票
1 回答
65 浏览

clojurescript - Om/Clojurescript:呈现重置应用程序状态的问题

一旦此小部件所需的数据到达,我正在尝试使用 om 显示组件。我想出了以下(大致):

尽管似乎触发了重新渲染,但state内部似乎render-state从来都不是我设置的。reset!我在这里用错了吗?当直接访问它时@datarender-state它会显示我设置的正确值reset!

0 投票
2 回答
362 浏览

reactjs - 无法使用事务更新状态!在欧姆

om-cookbook的本地状态示例中,我可以使用 update-state 更新计数器!和设置状态!,但不是交易!

我使用栗子模板初始化项目。

这些工作

这不起作用

来自 IRenderState 的调用