2013-01-18 35 views
1

我有一个Bootstrap模式的Rails应用程序。Rails Bootstrap模态传递值没有javascript?

下面是代码的一部分启动模式:

<a type="button" class="btn" href="#labor_modal" data-toggle="modal" data-woid= <%= workorder.id %>><i class="icon-time"></i></a> 

下面是模态的部分代码:

<div class="modal fade" id="labor_modal"> 
    <div class="modal-header"> 
    <a class="close" data-dismiss="modal">&times;</a> 
    <h3>Add Labor</h3> 
    </div> 
    <div class="modal-body"> 
    <%= simple_form_for(Event.new, validate: true, remote: true, html: {"data-type" => :json}) do |f| %> 
    <%= f.hidden_field :workorder_id, :value => data-woid.val() %> 

我想要得到的工作order.id传递给模式,因此可以保存在新记录中。

这个代码不工作:

<%= f.hidden_field :workorder_id, :value => data-woid.val() 

任何帮助,将不胜感激!

PS - 我希望我可以做到这一点没有jQuery - 但是,如果我需要它,就这样吧。

+0

你必须使用一个javascript,并且这个解决方案对我来说有最干净的解决方案http://stackoverflow.com/a/24962060/1612469 – Aleks

回答

0

<%= %>是ERb(嵌入式Ruby)标签。里面应该是Ruby代码。

data-woid.val() 

在您使用它的上下文中无效。

在呈现HTML之前处理ERb。在处理ERb时,Ruby不知道DOM或呈现的HTML元素或其属性。没有办法通过ERb在Ruby中读取HTML数据属性。在页面呈现和DOM构建完毕后,您必须访问它们。为此使用JavaScript/jQuery。

我猜work_order.id将用于设置关联。将此泄露给用户是不安全的;可以在提交之前将值更改为任何值。在您拨打save之前,应在控制器中设置关联,具体为create操作。

+0

它将在一个隐藏的输入字段 – Reddirt

+0

行 - 我会尝试使用jquery – Reddirt

+0

隐藏的输入仅从视图中隐藏。它们仍然存在于DOM中,可以通过一点JavaScript来修改。或者可以保存页面源,修改它,在另一个窗口中打开,然后发布表单。或者通过curl发布更改的请求。隐藏的字段不安全。 – Substantial

0

那么问题说没有JavaScript。我的答案可能不适用于任何场景或完美回答问题,加上它不会缩放,但它不使用JavaScript!

所以我会做的是根据参数创建尽可能多的模态,因为我需要。我会通过给他们分配不同的ID。这可以在rails上动态完成。

然后,每个环节会打开(显示)与其相配套的模式,它会看起来像一个参数被送往,因为每个模式将有必要的信息,设置在渲染时。