Clojure 底座:您可以使用什么数据流来呈现新初始化的空列表?
我正在尝试制作一个非常基本的底座应用程序来显示项目列表,如果列表为空,则显示一条短信 我想我想要的是:Clojure 底座:您可以使用什么数据流来呈现新初始化的空列表?,clojure,clojurescript,pedestal,Clojure,Clojurescript,Pedestal,我正在尝试制作一个非常基本的底座应用程序来显示项目列表,如果列表为空,则显示一条短信 我想我想要的是: 一个数据模型,其中[:root:items]将是我的项目列表 页面的模板函数([:root]) 空列表的静态模板函数 用于包含元素的列表的动态模板函数 在应用程序启动时,发送一条消息,将列表初始化为空 在渲染时,响应: [节点创建[]:映射]通过执行以下操作。。。什么都没有 [节点创建[:root]:映射]通过呈现整个页面的模板 [节点创建[:root:items]:映射]为空列表添加模板
- 一个数据模型,其中[:root:items]将是我的项目列表
- 页面的模板函数([:root])
- 空列表的静态模板函数
- 用于包含元素的列表的动态模板函数
- 在应用程序启动时,发送一条消息,将列表初始化为空
- 在渲染时,响应:
通过执行以下操作。。。什么都没有[节点创建[]:映射]
通过呈现整个页面的模板[节点创建[:root]:映射]
为空列表添加模板[节点创建[:root:items]:映射]
[:root :systems] => []
[:root] => {:systems []}
启动应用程序时,生成的渲染增量为:
[node-create [] :map]
[node-create [:root] :map]
[value [:root] nil {:items [] }]
我认为这不适合呈现我的项目列表,是吗
更新:
@solussd暗示这两个数据模型是相同的;但是,当生成以下增量时:
[value [:root] nil {:items []}]
我还是受不了。如果我添加如下呈现配置:
[value [:root :items] render-items-list]
[value [:root] render-root]
然后不调用呈现项目列表
函数
如果我添加如下呈现配置:
[value [:root :items] render-items-list]
[value [:root] render-root]
然后将调用render root
函数,但显然不是使用正确的“路径”,我想在数据模型中对“:root”元素进行任何其他更改时也会调用该函数
任何关于如何修复的想法都是受欢迎的…是的,这两个数据模型是相同的 节点创建和值增量足以将项目序列发送到渲染器,但渲染粒度是整个项目列表 您的渲染配置可能如下所示:
(defn render-config
[]
[:node-create [:root :items] render-item-list]
[:value [:root :items] update-item-list])
如果要为列表中的每个项目使用模板,例如
在html模板文件中),您可能希望在单个列表项级别输出增量,并可能使它们成为映射中的keyvals,例如,类似以下的模型:
{:root{:items{:1:2…}}
希望这有帮助。我现在没有计算机来检查这一点,但我认为如果您向数据流定义中添加一个emit
对,它将允许您触发渲染器:
{... :emit [[#{:root :items}] (app/default-emitter :main)]}
这基本上告诉数据流将对[:root:items]
的更改发布为路径[:main:root:items]
下的单独呈现增量。然后,应在渲染配置中指定以下路径:
[... [:value [:main :root :items] render-items] ...]
您需要以类似的方式添加渲染路径[:main]
,即
[... [:node-create [:main] render-root] ...]
当渲染增量开始到达渲染器时,这将触发主模板
希望这会有所帮助。为什么“ul”会成为列表中某个项目的模板?它不应该在另一个模板中,每个项目都有“li”字样吗?(我编辑了我的问题,以显示我想要生成的HTML;我开始想知道模板需要是什么…)你可以尝试在用户邮件列表上发布以获得帮助-我认为21世纪是一个不错的地方,但肯定,我会尽量不在那里得到回答:P(是的,这是一个脾气暴躁和幼稚的评论。只是不是合适的一天。对不起。)我不想添加“主”节点;我只想在[:root:items]而不是[:root]上发出一些东西。我会看看你的解决方案是否适合这样做……你可以省略app/default emitter
的参数,我相信这会产生你想要的结果。
[... [:node-create [:main] render-root] ...]