Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 捕捉:带盗窃的内/外循环_Haskell_Haskell Snap Framework - Fatal编程技术网

Haskell 捕捉:带盗窃的内/外循环

Haskell 捕捉:带盗窃的内/外循环,haskell,haskell-snap-framework,Haskell,Haskell Snap Framework,我不确定我是否正确地表达了标题中的问题,但情况如下。。 当表字段(模式)仅在运行时可用时,我需要创建一个带有heist的动态表。 通常,当模式在编译时已知时,我会这样做: <table> <row-splice> <tr> <td> <field1/> </td> <td> <field2/> </td> <td> <fie

我不确定我是否正确地表达了标题中的问题,但情况如下。。 当表字段(模式)仅在运行时可用时,我需要创建一个带有heist的动态表。 通常,当模式在编译时已知时,我会这样做:

<table>
  <row-splice>
    <tr>
      <td> <field1/> </td>
      <td> <field2/> </td>
      <td> <field3/> </td>
    </tr>
  </row-splice>
</table>
<table>
  <row-splice>
    <tr>
      <field-splice>
      <td> <field/> </td>
      </field-splice>
    </tr>
  </row-splice>
</table>
rowSplice = do
    rows <- lift getRowsFromDB
    mapSplices (\row -> runChildrenWith [("field-splice", fieldSplice row)]) rows
fieldSplice rowId = do
    fields <- lift $ getFieldsFromDB rowId
    mapSplices (\f -> runChildrenWith [("field", fieldToText f)]) fields
但实际上并不需要它,因为数据来自无模式的mongodb并转换为映射:

fromList [("FieldName1","Value1"),("FieldName2","Value2"),("FieldName3","Value3")]
更新2:

我尝试了一些建议的例子,但运气不佳,我只是在一列中获得了所有数据。 我只需要一个简单的内部和外部循环来动态生成字段和行。 再简单不过了:

<% @rows.each do |row| %>
  <tr>
  <% row.each do |field| %>
    <td> <%= field %> </td> 
  <% end %>
  </tr>
<% end %>

更新3:

经过一个漫长的周末休息,我终于破解了它。。。 这是一个例子。它是mongodb特有的,我只是复制并粘贴了它。 但是如果有人被内环/外环卡住了,我想这会很有帮助

showTableH :: AppHandler ()
showTableH = do
  table <- liftIO $ fetchTable tname
  docs <- liftIO $ getColList tname
  let rowSplice doc = mapSplices (\f -> fieldSplice $ T.pack $ at f doc) (tableFields table)
    where fieldSplice field = runChildrenWithText [("field", field)]
  let listRowsSplice = mapSplices (\d -> runChildrenWith [("fields", rowSplice d)]) docs
  heistLocal (bindSplices [("rows", listRowsSplice)]) $ render "show-table"
showTableH::AppHandler()
showTableH=do
表runChildrenWith[(“字段”,第行)]文档
heistLocal(绑定拼接[(“行”,ListRowsPlice)])$render“显示表格”

我认为这里的关键是使用Map剪接和runChildrenWith。我想它会像这样:

<table>
  <row-splice>
    <tr>
      <td> <field1/> </td>
      <td> <field2/> </td>
      <td> <field3/> </td>
    </tr>
  </row-splice>
</table>
<table>
  <row-splice>
    <tr>
      <field-splice>
      <td> <field/> </td>
      </field-splice>
    </tr>
  </row-splice>
</table>
rowSplice = do
    rows <- lift getRowsFromDB
    mapSplices (\row -> runChildrenWith [("field-splice", fieldSplice row)]) rows
fieldSplice rowId = do
    fields <- lift $ getFieldsFromDB rowId
    mapSplices (\f -> runChildrenWith [("field", fieldToText f)]) fields
rowspile=do
行runChildrenWith[(“字段拼接”,字段拼接行)])行
fieldSplice rowId=do
字段runChildrenWith[(“字段”,fieldToText f)]字段

非常感谢,但仍然不起作用。。我玩了一天了,运气不好。我显然做错了什么。在您的示例中,正如我所看到的,在一行中只有内部“循环”生成字段。现在,内部“循环”应该与生成表内行的外部循环一起运行。我只是不知道如何把两者联系起来。所以内部的“mapplicates”应该创建一行,外部的“mapplicates”应该创建一个表。试试看,非常感谢。我也把它破解了。。。即使您的第一个示例对我帮助很大,我也知道了如何嵌套“runChildren”函数。再次感谢。