2012-10-17 25 views
0

我想添加三个字段,这些字段将用作计数器到我应用程序屏幕的顶部。但是,下面的代码实际上工作,但如果您将页面置于编辑模式,然后单击“保存”按钮,三个计数器字段将消失并保持这种状态,直到刷新浏览器为止。我是Haml的新手,那里没有太多的文档,有什么没有帮助我。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"); 
} 

任何帮助将大大赞赏。谢谢!

+0

您描述的保存按钮在哪里点击以及点击时触发了什么? “li”元素如何填充?我怀疑这是一个Javascript的事情,并不需要与Haml做。 '= f'从Rails表单构建器插入输出,但包含自己的标记也不是问题。 –

+0

我相信你100%正确。我添加了Save按钮的代码以及用于填充li元素的JavaScript。谢谢! –

回答

0

无论何时更新窗体,您都需要触发填充元素的Javascript。想必你打电话getElementCount在页面加载时,你可以触发它时的形式呈现:

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

,但我想有点作为的事情是如何连接在一起,也许这不会为工作你的情况。

+0

我实际上已经在我的JavaScript中使用了这一行: '$('body')。load(getElementCount());' 但这似乎不起作用。 –

+0

注意:您提供的代码越多,人们就越容易帮助您。将其更改为:'$('body')。load(function(){getElementCount();});'。你写它的方式的问题是'getElementCount'被立即调用;将它传递给一个函数意味着函数不会被执行,直到'onload'事件被触发。 –

+0

对不起,关于不包括更早的代码行。我其实并没有写这个;我正在努力清理别人的烂摊子。无论如何,我尝试了你的建议,但也没有奏效。这非常令人困惑。 –