2

编辑#2

在我看来,我应该能够使用 javascript 来 JSON 解析respond_with_bip(@buildingTour)返回的任何内容,因为那是我需要的更新对象(我需要访问 的更新值@buildingTour.monthly)。但是,当我尝试解析它时,我没有运气。我读过一些关于respond_with_bip 破坏JSONParse 的内容,所以也许这就是正在发生的事情。

如果有人可以帮助我解析@buildingTour 以获取每月属性(即,向我展示javascript),将不胜感激。

编辑

@MikeKijewski - 澄清一下,我的视图是一个显示视图,即我们只处理一行。我知道您所指的 SO 文章是处理具有多行的表,这有点棘手。我不明白为什么我的控制器中的“respond_with_bip”还没有返回我需要的东西。这是我的控制器:

  def update
    @buildingTour = BuildingTour.find(params[:id])

    respond_to do |format|
      if @buildingTour.update_attributes(params[:building_tour])
        format.json { respond_with_bip(@buildingTour) }
      else
        format.json { respond_with_bip(@buildingTour) }
      end
    end
  end

那么为什么我不能使用“respond_with_bip”返回的数据来更新页面上的字段呢?

现在我只是在使用location.reload();best_in_place 更新两个相关字段(sqft 和 rentrate)时使用,然后显示第三个字段(每月)的适当值。


best_in_place在我的 rails 应用程序中使用(用于就地编辑值 sqft 和 rate),它工作得很好,但有一个例外:

我的模型中有一个计算属性,称为monthly. 当我用 a 更改值时best_in_place,我需要monthly在页面上重新计算和更新该值。

这是monthly我模型中的代码:

  def monthly
    if sqft && rate
        monthly = (sqft * rate) / 12
    end
  end

这是我认为的代码片段(这是我要更新的文本 - 它位于 ID 为“rental-details”的跨度内):

<strong><%= number_to_currency(@buildingTour.monthly, :precision => 0) %></strong>

这是我在进行best_in_place更改时识别出的javascript,然后理论上更新上面的值:

$('.best_in_place').change(function() {
    $.ajax({
      success: function() {
        $("#rental-details strong").text('<%= number_to_currency(@buildingTour.monthly, :precision => 0) %>');
      }
    });
  });

所以代码都“工作”没有错误。. . 除了它正在拉动每月的旧值。我通过从 JavaScript 中删除来测试这一点number_to_currency,果然当我更改其他值之一时,它会从页面上的值中删除货币格式(所以我知道 JavaScript 正在被触发并更新文本)。

我想可能是 JavaScript 启动得太快了(数据库还没有更新为 sqft 和 rate 的新值),但我尝试了几次更改 sqft 和 rate 的值,但每月的值从未更新。

那么无论如何<%= number_to_currency(@buildingTour.monthly, :precision => 0) %>,JavaScript 的一部分是否只在页面加载时被调用一次?如果是这样,你如何强制它monthly每次查询?

需要指出的一件事......monthly不是表格中的一列building_tours,我只是动态计算它。

感谢您对此问题的任何见解。我已经用谷歌搜索和stackoverflow了,他们都让我觉得我当前的代码应该可以工作。

4

1 回答 1

1

我最终创建了一个 javascript 函数,用于监视要更新的具有某个类(.best_in_place 或类似内容)的元素,然后从控制器操作(在您的情况下为 BuildingTour?)获取 json 响应并用替换表行包含更新的 .monthly 值的新表行。查看这篇 SO 文章:

best_in_place 更新后更新各种 DOM 元素

于 2013-04-22T17:07:00.657 回答