0

我想在我的应用程序的屏幕顶部添加三个将用作计数器的字段。以下代码确实有效,但是,如果您将页面置于编辑模式,然后单击“保存”按钮,三个计数器字段会消失并保持这种状态,直到您刷新浏览器。我是一个 Haml 新手,那里没有太多文档,而且文档很少,对我没有帮助。

以下是用于呈现相关页面的相关 Haml 代码:

- form_for [@application, @item_collection], :html => { 'data-remote' => 'json', :id => 'edit_item_collection', :class => 'show_progress inline_edit' } do |f|
  = render 'edit_fields', :f => f
  .submit.editing_only
    %button.default_action{ :type => 'submit',:id => 'Save'} Save`

这是实际页面的Haml代码:

.field.large
  = f.label      :name, nil, 'data-help-id' => 'page_name'
  = f.text_field :name, disabled_if_unauthorized(@item_collection, :maxlength => 255, :title => "Edit Page")
  = f.error_message_on(:name, :css_class => 'error_message')
.field
  = f.label      :path, nil, 'data-help-id' => 'page_path'
  = f.text_field :path, disabled_if_unauthorized(@item_collection, { :maxlength => 255, :class => 'extra_margin', :title => "Edit Page" })
  = f.error_message_on(:path, :css_class => 'error_message')
.field.info
  = f.label      'Info'
  %ul.elements_count
    %li.elements_in_use{ :id => 'elements_in_use' }
    %li.unused_elements{ :id => 'unused_elements'}
    %li.undefined_elements{ :id => 'undefined_elements'}

当我单击“保存”时,elements_count 无序列表会消失(但如果我刷新浏览器会重新出现)。我知道问题是我需要输入“= f”。在这些元素前面,但我不知道如何为列表执行此操作。

这是我用于填充 li 元素的 JavaScript:

function getElementCount() {
  var usage_element_total = $('.usage').size();
  var unused_element_total = $('.unused').size();
  var undefined_element_total = $('.undefined').size();
  $('#elements_in_use').html(usage_element_total + " Elements in use,");
  if (unused_element_total < 1) {
    $('#unused_elements').html(" 0 unused Elements,");
  } else {
    $('#unused_elements').html((unused_element_total-1) + " unused Elements,"); 
  }
  $('#undefined_elements').html(undefined_element_total + " undefined Elements");
}

任何帮助将不胜感激。谢谢!

4

1 回答 1

0

您需要在表单更新时触发填充元素计数的 Javascript。大概您在getElementCount页面加载时调用,您可以在呈现表单时触发它:

$("form").bind("ajax:complete", getElementCount);

但我猜测事情是如何连接在一起的,也许这对你的情况不起作用。

于 2012-10-17T18:01:26.233 回答