Opa:在迭代中将变量传递给事件处理程序

时间:2012-10-09 23:51:13

标签: event-handling iteration opa

对于Opa那里的人们,上周末我一直对这个问题感到困惑。

我在View中尝试做的是迭代我的Model数据调用返回的DBSet,生成一个XHTML记录表,每个记录绑定到一个click事件处理程序。 我希望这个click事件处理程序接受迭代记录类型的属性作为参数,或者记录本身。 type team = { string team_id, ...etc} 我在我的视图中有一个表单,我想用最近点击的表行的值填充输入,这是事件处理程序的作用 - 如果我甚至可以将正确的参数传递给它。

我该怎么做?

我试图让一些XHTML绑定像这样的事件处理程序

<tr onclick={ otherExposedFunctionIWantToCall(team) }> 

<tr onclick={ otherExposedFunctionIWantToCall(team.team_id) }>

我最近要做的一件事就是试图查看我是否可以访问我在自定义类型团队中设置的team_id属性。

function teams_management_view(){
    tbody = Iter.fold(
          function(team, acc){
            <>{acc}<tr onclick={ function(_){ Log.info("click", {team.team_id})}}><td class="team_id">{team.team_id}</td><td class="team_name">{team.name}</td></tr></>
          },
          TeamModel.get_teams(),
          <></>
        )
  ...
}

当我在迭代代码中使用它们时,这些事件处理程序的形式都不能编译。

为什么这不起作用? 我正在使用动态记录进行迭代的问题是什么? 我甚至可以将这样的功能绑定到事件上吗? 做Opa客户端事件有没有办法访问事件的目标 - 似乎没有找到任何? 我有什么选择来实现我的目标?

如果有人能帮助我理解这个问题的任何部分,我会非常感激!

1 个答案:

答案 0 :(得分:0)

愚蠢的我,事实证明我完全忽略了团队变量完全在函数范围内(传递给Iterator)的事实。

原来我没有将team_id(这是一个int字段)转换为字符串......

我发现这有效:

<tr onclick={ function(_){ setTeamView("{team.team_id}")} }>

然而,这一直给我一个错误,

Expression has type
    void
    but is coerced into
    FunAction.t

<tr onclick={ setTeamView("{team.team_id}")}>

您的自定义函数最好首先包含在匿名包装函数中,如我给出的第一个示例中所示。 team.team_id的字符串转换仅适用于第一种情况。

我猜到下一个!