首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Om如何呈现list对象?

Om如何呈现list对象?
EN

Stack Overflow用户
提问于 2015-05-15 20:49:15
回答 2查看 177关注 0票数 3

我很难理解om如何使用apply来呈现列表项,如下面从Om教程页面获取的示例所示。

代码语言:javascript
复制
(om/root
  (fn [data owner]
    (om/component 
      (apply dom/ul nil
        (map (fn [text] (dom/li nil text)) (:list data)))))
  app-state
  {:target (. js/document (getElementById "app0"))})

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

我不明白的是:

  • 为什么我要将dom/ul应用到列表中,我不想创建ul元素,而是要创建li元素?
  • 如何应用此示例中发送的所有参数?
EN

回答 2

Stack Overflow用户

发布于 2015-05-16 07:51:17

dom/ul是一个函数,它生成一个function组件,它将呈现相应的DOM元素。dom/ul的第一个参数指定您希望DOM元素具有的属性。例如,如果希望dom/ul将类属性设置为"main",可以执行以下操作:

代码语言:javascript
复制
  (apply dom/ul #js {:className "main"}
    (map (fn [text] (dom/li nil text)) (:list data)))

将零传递给dom/ul的第一个参数,只需设置任何DOM属性。

Clojure apply通过将所有参数(在dom/ul参数之后)先于最终列表(由地图生成)参数并将结果作为参数传递给dom/ul来调用dom/ul

例如,假设数据具有以下值:

代码语言:javascript
复制
["Apple" "Bird"] 

然后,您的示例中的dom/ul最终将被调用为:

代码语言:javascript
复制
(dom/ul nil
    (dom/li nil "Apple")
    (dom/li nil "Bird"))

这将导致呈现以下HTML:

代码语言:javascript
复制
<ul>
  <li>Apple</li>
  <li>Bird</li>
</ul>
票数 2
EN

Stack Overflow用户

发布于 2015-05-16 08:35:02

当我第一次开始学习Om时,我花了一段时间才明白。需要记住的关键是,每个om.dom函数都接受一个JS属性映射作为它的第一个参数,然后再使用任意数量的om.dom参数。正如我所期望的那样,om.dom函数将接受属性和dom元素的向量。一旦这个点击,很多Om的设计对我来说更有意义。

Clojure的apply“解包装”一个集合,并将集合的元素作为参数传递给要应用的函数。因此,我们计算的中间步骤是:

代码语言:javascript
复制
(apply dom/ul nil
    (map (fn [text] (dom/li nil text)) (:list data)))

然后

代码语言:javascript
复制
(apply dom/ul nil
    '((dom/li nil "Hi") (dom/li nil "there")))

然后

代码语言:javascript
复制
(dom/ul nil
    (dom/li nil "Hi") (dom/li nil "there"))

如果没有应用程序,我们就不会将正确的参数传递给dom/ul。您还将看到与om/build一起使用的apply,它返回类似于map的集合。

再举一个例子来扩展这一点,如果我们想将两个dom/ul放在一个dom/p中,它将以扩展的形式出现:

代码语言:javascript
复制
(dom/p nil
    (dom/ul nil (dom/li nil "Hi") (dom/li nil "there"))
    (dom/ul nil (dom/li nil "Next") (dom/li nil "list")))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30268484

复制
相关文章

相似问题

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