问题标签 [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 回答
749 浏览

clojurescript - clojurescript om - 从二维向量渲染表格的更好方法

我是 Clojure/Clojurescript 和 Om 的新手,经过一番挣扎,我想出了这种方法来从 2d 矢量渲染表格:

我正在寻找有关如何使其更简洁或如何从一个组件函数创建整个表的指针。

0 投票
1 回答
2592 浏览

clojurescript - ClojureScript、Om 和 Core.async:如何正确处理事件

我看过使用 Om 进行富客户端网站设计。这也是我第一次使用 core.async。阅读教程https://github.com/swannodette/om/wiki/Basic-Tutorial我已经看到使用 core.async 通道来处理删除操作(而不是在处理程序中完成所有工作)。我的印象是使用该通道进行删除只是因为删除回调是在一个范围内声明的,在该范围内,您在项目级别上有一个光标,您实际上想要操作包含该项目的列表。

为了更深入地了解通道,我看到了 Rich Hickey 的演讲http://www.infoq.com/presentations/clojure-core-async,他解释了使用通道从事件回调中获取应用程序逻辑是一个好主意。这让我想知道教程中删除通道的实际目的是否是为了展示构建应用程序的方式。如果是这样的话,

  • 与该模式相关的最佳实践是什么?

  • 是否应该为各种事件创建单独的频道?即,如果我添加一个控制器来创建一个新事件,我是否还会为对象创建创建一个新通道,然后用于将对象添加到应用程序中另一个位置的全局状态?

  • 假设我有一个项目列表,其中一个项目有一个详细/简洁的状态标志。如果detailed?true,它将显示更多信息,如果detailed?false,它将显示更少信息。我已经关联了一个在光标上使用的单击事件om/transact!(作为全局状态对象中列表项的视图)。

我意识到这可能是一个非常简洁的片段,其中使用通道作为将回调事件与实际逻辑更改分离的手段的整体好处起初似乎不值得付出努力,但更复杂示例的整体好处超过了这一点。但另一方面,为这种不详细的切换引入额外的通道似乎也给源代码增加了相当多的负载。

如果您能就整个设计问题提供一些提示/提示或其他想法并将它们放在透视图中,那就太好了。我在那里感到有些失落。

0 投票
1 回答
492 浏览

clojurescript - 使用 set :value 正确编辑 Om 输入

我需要显示具有从光标读取的初始值的输入元素,但是当用户输入新文本时,我不需要将光标更新回来。例如:

我发现我总是必须为 onChange 事件提供一个函数,以便让输入元素自行更新,至少是一个空的。这是正确的方法吗?非常感谢。

0 投票
1 回答
215 浏览

clojurescript - om - ajax 调用后数据不更新

我有以下代码,我认为我在做一些根本错误的事情。

我正在om/IWillMount像这样进行远程ajax调用:

我期待从远程调用返回一个二维向量,这很有效,因为我可以使用

然后我用om/update它来更新数据结构。

但是当调用渲染时,数据似乎没有更新,我可以通过尝试记录数据结构来测试

这不记录任何内容。

我看不出我做错了什么或者为什么数据结构没有更新。

0 投票
1 回答
226 浏览

clojurescript - :init-state 与 :state 在构建函数中的区别

我知道您可以通过将映射作为 :init-state 关键字的值传递来启动组件的状态。但是通过将此映射作为 :state 关键字的值传递,例如,在组件与其子组件之间,现在它们可以共享相同的状态了吗?是这样吗?谢谢。

0 投票
3 回答
662 浏览

clojure - 在这个 Clojure 上下文中,这个“#”是什么意思?

我在“examples/mixins”下偶然发现了官方的 Om 示例,定义如下:

“#js”是什么意思?当以这种方式使用符号“#”时,我找不到任何关于符号“#”的 Clojure 文档。

0 投票
1 回答
313 浏览

clojurescript - 无法在 OM 中显示两个组件

我正在尝试学习 Om,但遇到了一些我不明白的事情。我希望这段代码

产生这个html:

然而,事实并非如此!第一个div包含 Test 不显示。我有什么误解?

使用解决方案进行编辑(FakeRainBrigand 指出):

将代码更改为

结果是预期的html。

0 投票
2 回答
861 浏览

clojurescript - OM 组件与普通函数

我正在阅读这个OM 教程,但我不清楚何时使用 OM 组件与普通函数(特别是 om/component 宏)。

教程写道:

第一个参数是一个接受应用程序状态数据和支持 React 组件的函数,这里称为 owner。此函数必须返回一个 Om 组件 - 即 om/IRender 接口的模型,如 om.core/component 宏生成

在下一节中,我们将找到以下列表渲染循环的示例:

在这里,我们基本上只是直接返回一个(虚拟)dom,而不是包装在 OM 组件中,所以问题是:为什么 om/component 宏存在?该宏只是帮助我们具体化 IRender 函数,但似乎我们也可以为此使用普通函数。我会具体化具有生命周期状态的 OM 组件(或需要所有者调用 get-props),但对于只需要创建虚拟 dom 的组件,我宁愿使用简单的功能(所以我不需要构建/构建-创建我的虚拟dom的所有功能)。我在这里想念什么?为什么宏仍然有用(我没有看到)。

0 投票
1 回答
751 浏览

clojure - Clojurescript + Om:等待状态改变,然后做一些事情

我正在尝试制作一个显示食谱的 Clojurescript 应用程序。

相关代码如下(也可作为 gist获得):

我想要完成的事情:

  • 首先使用异步 http 调用获取食谱。我正在使用返回通道的 cljs-http.client
  • 使用秘书库定义路线。在 /random 路线中,我想选择一个随机配方。这只会在数据已被获取并已在应用程序原子中更新时发生。

我现在得到的是浏览器中的无限循环。发生了什么?

另一种选择是将我所有需要首先获取数据的路线包装在一个 go 块中并放在(<! (load-recipes))第一行。

PS:我结束了

0 投票
2 回答
424 浏览

clojurescript - 无法在渲染阶段之外操作光标

第一次尝试做出反应,我想做一个简单的待办事项列表应用程序。但是每次我按回车触发onSubmit它都会说Uncaught Error: Cannot manipulate cursor outside of render phase, only om.core/transact!, om.core/update!, and cljs.core/deref operations allowed。虽然我认为这是一个非常好的错误消息,但我不知道该怎么做。