我正在尝试在Rails 3应用程序中实现就地编辑,该应用程序采用编辑值并根据该值修改计算。例如:

在编辑“捐赠信用”字段之前:
您还有10个学分。捐赠的积分:0。

在编辑“捐赠信用”字段之后:
您还有5个学分。捐赠的积分:5。

我已经研究了各种选择,看来jQuery in-Oh-in-on-Oiditor可以做我想要的。以供参考:

演示起作用。但是我认为我需要做的就是使用回调函数调用Ruby脚本,以便我可以进行更多处理。我不确定这是否是我需要做的,所以我正在寻找一些指导。

这是jQuery javascript(来自 /public/javascripts/application.js 在示例应用程序中)我认为是相关的:

// Using a callback function to update 2 divs
$("#editme4").editInPlace({
    callback: function(original_element, html, original){
        $("#updateDiv1").html("The original html was: " + original);
        $("#updateDiv2").html("The updated text is: " + html);
        return(html);
    }
});

看来我需要做的就是 originalhtml 并与他们一起玩一些,然后将它们送回适当的Divs。问题是,我该怎么做?我正在考虑两种可能性:

一种。 现场编辑中有一个设施可以呼叫URL。我可以用它来调用红宝石脚本并获得结果吗?我该如何在轨道上做到这一点?这是调用URL的代码(再次从 /public/javascripts/application.js);但是它称为PHP脚本。

$("#editme1").editInPlace({
    // callback: function(unused, enteredText) { return enteredText; },
    url: 'server.php',
    show_buttons: true
});

B. 直接在JavaScript中修改更新的文本,然后将其传递给适当的Divs。我更喜欢使用红宝石脚本,但这也许会更容易。

有帮助吗?

解决方案

解决这个问题的解决方案非常复杂,但是我找到了一种方法。令人惊讶的是,该解决方案不容易获得,因为正如R-Dub所说,它确实很普遍。我最终没有使用jQuery插件的任何现场设施,而是在jQuery的帮助下直接在表单文本字段的基础上直接修改了文本字段。我换句话说,我遵循(b)上面。

我的观点看起来像这样:

Available: <span id="available_cr"><%= @available_credits %></span>
Remaining: <span id="remaining_cr"><%= @remaining_credits %></span>

<%= form_for(@page, :html => { :id => 'do_fvalue' }, :remote => true) do |f| %>
  <div class="field">
    How many to buy at <%= @cost %> credits per unit? <%= f.text_field :fvalue, :autocomplete => :off %>
  </div>
  <div class="field">
    How many to buy at <%= @cost_20 %> credits per unit? <%= f.text_field :gvalue, :autocomplete => :off %>
  </div>
  <div class="actions">
    <%= f.submit "Update" %>
  </div>
<% end %>

然后,我将Rails @-Variables塞入.html.erb partial(在我的页面.html.erb的开头)中,以便JavaScript/jQuery可以访问它们:

<script type="text/javascript">
  var cost = parseInt(<%= @cost %>)
  var cost_20 = parseInt(<%= @cost_20 %>)
  var available_credits = parseInt(<%= @available_credits %>)
  var remaining_credits = parseInt(<%= @remaining_credits %>)
</script>

然后,在public/javascripts/applications.js中,我有以下代码:

function checkFields(){
  var to_buy_f = $("#page_fvalue").val();
  var to_buy_g = $("#page_gvalue").val();
  var subtract_f = to_buy_f * cost;
  var subtract_g = to_buy_g * cost_20;
  var remain = available_credits - subtract_f - subtract_g;
  $("#remaining_cr").text(remain);
};

$("#page_fvalue").keyup(function () {
   checkFields();
}).keyup();

$("#page_gvalue").keyup(function () {
   checkFields();
}).keyup();

CheckFields函数根据#PAGE_FVALUE和#PAGE_GVALUE中的值更新#Remaining_cr。请注意,它利用了可用的_credits,成本和成本_20,我们将其塞入上面的JavaScript变量中。最后两个函数告诉jQuery为关键事件监视#PAGE_FVALUE和#PAGE_GVALUE。当用户按键时,它将CheckFields()调用#remaining_cr。

除此之外,当用户在表单上单击“提交”时,整个表单将随当前值提交。我不知道这是否是做我想做的事的最有效方法,但它起作用了!

其他提示

您要做的事情很普遍。您要做的是在该回调中提出AJAX请求,将原始数据发送到您的Rails应用程序,并将修改后的HTML返回页面。这是jQuery AJAX手动页面. 。向下滚动以查看一些示例。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top