#javascript #ruby-on-rails #ruby
#javascript #ruby-on-rails #ruby
Вопрос:
Если у вас есть javascript, написанный на HAML, с массивом ruby, интерполируемым в javascript, как вы заставляете ruby выводить NULL?
:javascript
$().ready(function() {
$(document).ready(function() {
$("table#hands-table").dataTable( {
"aoColumns" : #{@column_sort_types},
Если @column_sort_types содержит пустое пространство или nil, ни один из них не будет выводить NULL. И попытка добавить NULL в массив ruby создает ошибку ruby. Должен ли я выполнять регулярное выражение javascript?
Ответ №1:
Попробуйте:
#{@column_sort_types.to_json}
to_json будет работать с nil:
nil.to_json
=> "null"
Ответ №2:
:javascript
$().ready(function() {
$(document).ready(function() {
$("table#hands-table").dataTable( {
"aoColumns" : #{@column_sort_types.present? ? @column_sort_types : "NULL"},
При этом используется Object#present?
, что является противоположностью blank?
. Это дополнения к Object
от ActiveSupport. Объекты являются пустыми, если они либо пустые, либо имеют значение nil, false или представляют собой строку, состоящую только из пробелов.
Ответ №3:
Если я правильно понимаю, что вы имеете в виду, вы можете использовать способность ruby ‘open class’:
class Array
def to_array_with_null
self.map do |val|
val = "NULL" if val.nil? or (val.respond_to? :empty? and val.empty?)
val
end
end
end
[1, '2', 3, nil, ''].to_array_with_null # => [1, "2", 3, "NULL", "NULL"]
И в таком случае вы можете использовать #{@column_sort_types.to_array_with_null}
вместо #{@column_sort_types}
. Поправьте меня, если я вас неправильно понял.
Ответ №4:
просто передайте nil в javascript, javascript будет обрабатывать его как переменную с именем «nil», затем определите переменную var nil = null
в javascript.
Ответ №5:
%Q, похоже, является элементом, которого мне не хватало.
%Q[null, null]
Ответ №6:
Использование «NULL» в Ruby on Rails приведет к печати «NULL» (с кавычками) в javascript. Но javascript нужен null без кавычек. Я все еще не мог понять это.