问题标签 [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.
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 行加载
关于可能出了什么问题的任何想法?
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>
clojurescript - 如何从 Om DIV 获取 DOM 元素?
我正在使用 Clojurescript Om,我需要访问组件中包含的其中一个 DIV 上的底层 DOM 元素(以便我可以将 offsetTop 设置为 0)。我怎样才能访问这个元素?
clojurescript - Om 如何渲染列表对象?
我正在努力理解 om 如何使用 apply 来呈现列表项,如下面的示例所示,取自 Om 教程页面。
我对 apply 的理解是它需要一个函数和一个项目列表并将该函数应用于列表。但在这个例子中,理解将转化为dom/ul
应用于nil
.
我不明白的事情是:
- 为什么我申请
dom/ul
一个列表,我不想创建ul
元素,我想创建li
元素? - apply 如何处理此示例中发送的所有参数?
asynchronous - 如何使用 Om + Figwheel + core.async 编写可重新加载的异步代码?
我想写一个时钟应用程序之类的东西。状态基本上是一个重复递增的数字。一种方法可以在这里看到。
我遇到的问题是这不是可重新加载的代码。一旦我通过无花果轮刷新代码,增量会变得更快,因为有几件事会更新状态。
我尝试尝试各种想法(基本上是制作不同的组件来拥有 go 语句代码),但我无法想出可行的方法。
有没有人对此有一个很好的解决方案,还是我只需要在开发过程中坚持下去?
clojure - 使用宏生成 Om 组件
我正在尝试使用宏来生成一系列类似的 Om 组件(例如,包含通用样板和动态“主体”的模态元素)。
我有下面的解决方案主要工作。一个例外是owner
在表单的on-submit
事件处理程序中访问适当的。
模态按预期呈现,但是在提交表单时出现错误:Uncaught TypeError: Cannot read property 'getDOMNode' of undefined
,这似乎是因为owner
不在范围内。(注意,这个元素和它的事件处理程序在完全构造时会按预期运行——即不使用宏。)
如何使owner
宏的主体可用?
clojure - 持久数据结构如何帮助使 Om 更快
Om 是 React 的 clojurescript 包装器,据说速度非常快,因为它利用了不变性。我无法理解持久数据结构如何在这里提供帮助。
我所理解的是应用程序状态是一个原子。此状态被传递给返回虚拟 DOM 节点的函数(om 组件),因此创建当前虚拟 DOM 与其先前状态之间差异的“补丁”比直接在实际 DOM 上操作要好得多。
但是持久数据结构在哪里可以提供帮助?
例如click-counter
,渲染一个按钮,单击该按钮会增加计数器。所以转换函数看起来像这样:
我不明白这一点:onClick
执行 clojurescript 时会创建一个新地图(非常有效),如下所示:
现在app-state
指向新地图。此时 Om 知道状态已更改,因为这只是一次相等检查的问题。
这里的问题是 Om 仍然应该计算整个旧虚拟 DOM 和新虚拟 DOM 之间的差异。它不知道只是改变了计数器。
我的错误在哪里?
clojurescript - 新栗子项目:编辑应用状态不会刷新浏览器
在被 Nolen 的精彩演讲大肆宣传之后,我决定试一试 Clojurescript 和 Om。
一切都像宣传的那样工作——除了我有点惊讶的是,编辑app-state
不会像编辑style.css
或 Om 组件树那样刷新浏览器。
app-state
我猜这是故意的,并且编辑不刷新浏览器是有充分理由的。但是,我对 ClojureScript 非常陌生,并且不太清楚该去哪里寻找答案。
任何帮助/见解表示赞赏!
clojurescript - Om/Clojurescript:呈现重置应用程序状态的问题
一旦此小部件所需的数据到达,我正在尝试使用 om 显示组件。我想出了以下(大致):
尽管似乎触发了重新渲染,但state
内部似乎render-state
从来都不是我设置的。reset!
我在这里用错了吗?当直接访问它时@data
,render-state
它会显示我设置的正确值reset!
。
reactjs - 无法使用事务更新状态!在欧姆
在om-cookbook的本地状态示例中,我可以使用 update-state 更新计数器!和设置状态!,但不是交易!
我使用栗子模板初始化项目。
这些工作
这不起作用
来自 IRenderState 的调用