氮气得到table的含量

Nitrogen get content of table

所以,我有一个氮气页面,index.erl,其中包含如下代码:

body() ->
  [#table{
     id = mytable,
     rows=[
           #tablerow{
              cells=[#tableheader{text="column a"},
                     #tableheader{text="column b"},
                     #tableheader{text="column c"},
                     #tableheader{text="column d"}]
             },
           #custom_row{ %% just a wrapper around #tablerow
              column_a = "a",
              column_b = "b",
              column_c = "c",
              column_d = "d"
             }
           %% ... more #custom_rows omitted
          ]
     },
   #button{text="submit", postback=store_table}
  ].

event(store_table) ->
  TableData = something_like_querySelector(mytable),
  insert_into_database(TableData).

如何获取 mytable 的含量,氮气是否有类似 querySelector 的东西?

没有像 querySelector 这样干净整洁的东西,但是可以通过使用 Nitrogen 的 #api{} action.

检索任意 DOM 元素的内容

使用上面的代码,我们可以执行以下操作:

body() ->
  wf:wire(#api{name=send_table_contents, tag=some_tag}),
  [#table{
     id = mytable,
     rows=[
           #tablerow{
              cells=[#tableheader{text="column a"},
                     #tableheader{text="column b"},
                     #tableheader{text="column c"},
                     #tableheader{text="column d"}]
             },
           #custom_row{ %% just a wrapper around #tablerow
              column_a = "a",
              column_b = "b",
              column_c = "c",
              column_d = "d"
             }
           %% ... more #custom_rows omitted
          ]
     },
   #button{text="submit", click="page.send_table_contents(objs('mytable').html())"}
  ].

api_event(send_table_contents, some_tag, [TableHTML]) ->
  insert_into_database(TableHTML).

它不像使用 wf:q 那样能够请求内容那么干净,但它确实完成了工作。

这里的快速解释是 #api{} 操作在页面上创建了一个名为 page.api_name_attribute 的新函数(所以如果你看上面,你会看到 name 属性是 send_table_contents 并且 #button.click 中调用的 javascript 函数也是 send_table_contents。然后在 api_event(NameOfAPI, Tag, ListOfArgs) 回发函数中捕获内容。

也就是说,我已将此功能添加到待办事项列表中,因为它看起来很有用。