2016-04-09 3 views
0

Я создаю приложение rails и использую datatables.net для отображения некоторых данных, которые можно добавить/удалить через AJAX.Создайте объект jquery html из частичного рендеринга rails

У меня есть это рельсы частичное, которые должны быть оказаны, а затем добавляют к DataTable:

<tr id="<%= "device-" + device.id.to_s %>"> 
    <td class="device-id"><%= device.id %></td> 
    <td class="device-devicetype-name"><%= device.device_type.name %></td> 
    <td class="device-serial"><%= device.serial %></td> 
    <td class="device-bought"><%= device.bought %></td> 
    <td class="device-remarks"><%= device.remarks %></td> 
    <td class="device-actions"> 
    <% if can? :manage, Rental %> 
     <%= form_for(@rental.device_rentals.build, remote: true) do |f| %> 
     <%= hidden_field_tag :device_id, device.id %> 
     <%= hidden_field_tag :rental_id, @rental.id %> 
     <%= button_tag(type: 'submit', class: "btn btn-primary") do %> 
      <span class="glyphicon glyphicon-plus-sign"></span> 
     <% end %> 
     <% end %> 
    <% end %> 
    </td> 
</tr> 

Я затем вызвать рендер функцию в ответ запроса AJAX и попытаться добавить его к столу, например, так:

availableDevicesList = $('#available-devices-list').DataTable(); 

availableDevicesList.row.add($("<%= escape_javascript render('devices/available_devices_table_row', :device => @device).to_json %>")).draw(); 

Это не работает, так как строка не добавляется в таблицу. Когда я копировать/вставить Jquery часть из ответа на запрос на консоль и запустить его, я получаю следующее сообщение об ошибке:

Uncaught Error: Syntax error, unrecognized expression: &quot;\u003ctr id=\&quot;device-3\&quot;\u003e\n \u003ctd class=\&quot;device-id\(...) 

EDIT: Это то, что JS Line визуализируется в ответ:

availableDevicesList.row.add($("\&quot;\\u003ctr id=\\\&quot;device-3\\\&quot;\\u003e\\n \\u003ctd class=\\\&quot;device-id\\\&quot;\\u003e3\\u003c/td\\u003e\\n \\u003ctd class=\\\&quot;device-devicetype-name\\\&quot;\\u003eBlack Case\\u003c/td\\u003e\\n \\u003ctd class=\\\&quot;device-serial\\\&quot;\\u003eCASE0001\\u003c/td\\u003e\\n \\u003ctd class=\\\&quot;device-bought\\\&quot;\\u003e01.12.2015\\u003c/td\\u003e\\n \\u003ctd class=\\\&quot;device-remarks\\\&quot;\\u003eMaserati sticker\\u003c/td\\u003e\\n \\u003ctd class=\\\&quot;device-actions\\\&quot;\\u003e\\n  \\u003cform class=\\\&quot;new_device_rental\\\&quot; id=\\\&quot;new_device_rental\\\&quot; action=\\\&quot;/device_rentals\\\&quot; accept-charset=\\\&quot;UTF-8\\\&quot; data-remote=\\\&quot;true\\\&quot; method=\\\&quot;post\\\&quot;\\u003e\\u003cinput name=\\\&quot;utf8\\\&quot; type=\\\&quot;hidden\\\&quot; value=\\\&quot;\\u0026#x2713;\\\&quot; /\\u003e\\u003cinput type=\\\&quot;hidden\\\&quot; name=\\\&quot;authenticity_token\\\&quot; value=\\\&quot;aiu/5qq8UVfPSCTvq3+VRsnXxwJS9agJuPIZTH1HXd3Y+ocFG7IhgB99P1UnTKfrhusw/vcO6vhSMnreDiVOSg==\\\&quot; /\\u003e\\n  \\u003cinput type=\\\&quot;hidden\\\&quot; name=\\\&quot;device_id\\\&quot; id=\\\&quot;device_id\\\&quot; value=\\\&quot;3\\\&quot; /\\u003e\\n  \\u003cinput type=\\\&quot;hidden\\\&quot; name=\\\&quot;rental_id\\\&quot; id=\\\&quot;rental_id\\\&quot; value=\\\&quot;1\\\&quot; /\\u003e\\n  \\u003cbutton name=\\\&quot;button\\\&quot; type=\\\&quot;submit\\\&quot; class=\\\&quot;btn btn-primary\\\&quot;\\u003e\\n   \\u003cspan class=\\\&quot;glyphicon glyphicon-plus-sign\\\&quot;\\u003e\\u003c/span\\u003e\\n\\u003c/button\\u003e\\u003c/form\\u003e \\u003c/td\\u003e\\n\\u003c/tr\\u003e\&quot;")).draw(); 
+0

ли эта помощь '<тр ID = "устройство - <% = device.id.to_s%>">' – Abhi

+0

@Abhi Нет, это все еще не удается. Я добавил, что линия в моем ответе JS будет оказана в моем вопросе. –

ответ

0

Обновление: я решил это, другой вопрос здесь, в stackoverflow, заявил, что эта ошибка может быть проблемой с кодировкой строки. Адаптирование решение, которое я нашел там привел меня к этому, который работает:

var deviceTableRow = ""; 
deviceTableRow += "<%= escape_javascript render('devices/rental_devices_table_row', :device => @device) %>"; 
rentalDevicesList.row.add($(deviceTableRow)).draw(); 
Смежные вопросы