2012-12-21 3 views
1

У меня есть приложение как с форматами мобильных, так и с html-форматами;jquery post с datatype = скрипт и jquery mobile с рельсами

В форме есть поле, которое должно быть заполнено значением, вычисленным удаленной веб-службой. С JQuery Я использую $ (пост) API для вызова действия контроллера, который вызывающий веб-службу

$.post(url, $(this).serialize(), null, "script"); 

Контроллер вычисляет переменную экземпляра ...

@myvar = myvalue 
.... 
respond_to do |format| 
    format.js 
end 

затем возвращает .js. erb. где я установил значение поля в моей форме

$('#mymodel_myfield').val('<%= @myvar %>'); 

Это работает как шарм в HTML, но я не могу заставить его работать в мобильных представлениях, где я использую Jquery Mobile с Mobylette камнем.

Функция jquery в шаблоне js.erb не выполняется, потому что rails ожидает файл .mobile.erb.

Я также пытаюсь использовать другой подход для мобильных просмотров, то есть вызывать $ .post с типом данных json или html и использовать функцию обратного вызова для вставки шаблона .mobile.erb в мое представление jqm, но не могу найти способ заставить его работать.

Подсказка?

ответ

0

Хорошо, используется несколько иной подход, но проблема решена.

Примечание: я должен был использовать Wireshark, чтобы быть в состоянии увидеть, что ад был послан по рельсам на мобильное устройство, так как нет поджигателя на мобильных браузерах .... Решение стало ясно, когда, глядя на данные, отправленные обратно в браузер, я видел, что ответ включал в себя приложение макет, в то время как я ожидал получить только строку json.

1) кнопка в виде jqm используется для вызова действия контроллера:

<div class="ui-block-c"> 
    <%= link_to "compute", '#', class: 'compute-myval',:"data-role" => "button", :"data-ajax" => false %> 
</div> 

2) действие контроллера сохраняет результат в переменной экземпляра и respond_to JSON (имя контроллера является «visits_controller» и действие контроллера "вычислить")

@total = "value returned from web service" 
... 
respond_to do |format| 
    format.js  #used for HTML views 
    format.json 
end 

3) существует мнение по имени

app/views/visits/compute.json.erb 

, содержание которого

{ "total": "<%= @total %>" } 

4) код JQuery выполняется при нажатии кнопки

$('form').on('click', '.compute-myval', function(event) { 
    var url; 
    url='/visit/compute'; 
    url += '/' + $('#visit_field1').val(); 
    url += '/' + $('#visit_field2').val(); 
    url += '/' + $('#visit_field3').val(); 
    $.ajax({ 
    url: url, 
    data: $(this).serialize(), 
    success: function (mydata) { 
     $('#visit_resultfield').val(mydata.total); 
    }, 
    dataType: 'json' 
    }); 
    return event.preventDefault(); 
}); 

5) Для управления: мобильный формат я использую камень Mobylette. Во избежание того, что действие контроллера, инициированное через Ajax , использует мобильный формат и применяется шаблон application.mobile.erb. Мне пришлось настроить пару конфигураций для Mobylette (внутри application_controller.Р.Б.)

include Mobylette::RespondToMobileRequests 
mobylette_config do |config| 
    config[:skip_xhr_requests] = false 
    config[:fallback_chains] = { mobile: [:mobile, :html, :json] } 
end 

Другое, что нужно, чтобы иметь под приложение/Макеты файл с именем application.json.erb , который содержит только одну строку

<%= yield %> 

Так это работает, потому что нет вычислений. mobile.erb зрения, нейтрализация: JSON и шаблон не добавляет ничего

6) выход в рельсах войти в

Started GET "/visit/compute/3/78/66" for 192.168.1.7 at 2012-12-22 00:13:35 +0100 
Processing by VisitsController#compute as JSON 
    Parameters: {"field1"=>"3", "field2"=>"78", "field3"=>"66"} 
    Rendered visits/compute.json.erb within layouts/application (0.1ms) 
Completed 200 OK in 1335ms (Views: 5.4ms | ActiveRecord: 1.0ms) 

7) поле «поле результатов» в форме Jqm заполнено всего значение.

Миссия завершена ...

Смежные вопросы