我有一些通过javascript加载的haml代码,用于向表中添加单元格和行。我有它的地方,当表单被提交时,它在页面上做所有的事情,而不是重新加载整个页面。除了表单标签之外,我已经准备好了所有的工作。我在不同的页面遇到了这个问题,解决方案是用erb而不是haml重写它。haml form_tag从javascript中转义。
这是我的代码
-@products.each do |product|
-if product[:suggested_category_id].nil?
-pid = nil
-cid = nil
-save = nil
-form = nil
-else
-form = form_tag("update_product_category",:method => :put, remote: true)
-pid = hidden_field_tag("product_id", value = product[:id])
-cid = hidden_field_tag("category_id", value = product[:suggested_category_id])
-save = submit_tag "Save"
-if product[:suggested_category_name].nil?
-name = nil
-else
-name =link_to product[:suggested_category_name], "change_category/#{product[:id]}", id: product[:id], remote: true
:plain
var table = document.getElementById("product_table");
var row = table.insertRow();
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
var cell4 = row.insertCell(3);
var cell5 = row.insertCell(4);
row.appendChild('#{form}');
cell3.className = '#{product[:id]}';
cell4.className = '#{product[:id]}';
cell5.className = '#{product[:id]}';
cell1.innerHTML = "#{product[:barcode]}";
cell2.innerHTML = "#{product[:name]}";
cell3.innerHTML = '#{name}';
cell4.innerHTML = '#{product[:suggested_category_permalink]}';
cell5.innerHTML = '#{pid}#{cid}#{save}';
-if @db_products.next_page
:plain
$('.pagination').replaceWith('#{will_paginate(@db_products)}');
-else
:plain
$('.pagination').remove();这是一个回应:
var table = document.getElementById("product_table");
var row = table.insertRow();
var cell1 = row.insertCell(0);
var cell2 = row.insertCell(1);
var cell3 = row.insertCell(2);
var cell4 = row.insertCell(3);
var cell5 = row.insertCell(4);
row.appendChild('<form accept-charset="UTF-8" action="update_product_category" data-remote="true" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="blmkKSyMOJHGiYIJZ+/G6DBUNZw7LHMK5MasdPFsol8=" /></div>
');
cell3.className = '648878';
cell4.className = '648878';
cell5.className = '648878';
cell1.innerHTML = "710425394065";
cell2.innerHTML = "Mafia II (Xbox 360)";
cell3.innerHTML = '<a href="change_category/648878" data-remote="true" id="648878">consoles</a>';
cell4.innerHTML = 'video-games/xbox-360/consoles';
cell5.innerHTML = '<input id="product_id" name="product_id" type="hidden" value="648878" /><input id="category_id" name="category_id" type="hidden" value="17983" /><input name="commit" type="submit" value="Save" />';请注意,Haml是如何在row.appendChild的表单中的之后插入新行的。有没有办法切换haml使其不添加自己的换行符?
发布于 2016-03-19 13:17:46
可以使用escape_javascript/j帮助器方法。然后,要使用appendChild,您必须首先创建一个元素,如div。您可能希望从以下内容开始:
...
var cell4 = row.insertCell(3);
var cell5 = row.insertCell(4);
var div = document.createElement('div');
div.innerHTML = '#{j form}';
row.appendChild(div);发布于 2016-03-25 01:37:38
我发现的答案是Haml不能很好地使用javascript。如果你要有一个js文件,它应该是一个Erb文件。所以your_file.js.haml应该是your_file.js.erb。
https://stackoverflow.com/questions/36045733
复制相似问题