Rails и jQuery отправляют запросы Ajax - PullRequest
1 голос
/ 10 января 2011

Привет У меня в настоящее время есть приложение Rails, которое использует библиотеку jQuery для выполнения запросов ajax.Однако я столкнулся с небольшой проблемой, так как отправляемый ajax-запрос выдает ошибку:

a(this).data("draggable") is undefined

Программа rails должна взять перетаскиваемый объект и поместить его в допустимый контейнер.а затем обновите свойства перетаскиваемого объекта, чтобы отразить новые разрешения, предоставляемые перетаскиванием.Так что это в основном способ организации разрешений, но с помощью перетаскивания.Это код Rails

<%= drop_receiving_element drop_id,
            :onDrop => "function(ev,ui){
          if (confirm(\"#{escape_javascript(_('This will add User to this Group, are you sure?'))}\"))
          {#{remote_function(:update => 'module_content',
          :url => {:controller => :projects,
          :action => :member_change,
          :id => @project.id},
          :with => "'u=' + encodeURIComponent($(ui.draggable).attr('id')) + '&r=' + encodeURIComponent($(this).attr('id'))"
          )};}
          }",
            :accept => '.RolesUsersSelection',
            :update => 'roles_edit',
            :url => {:controller => :projects, :action => :role_user_update},
            :hoverclass => "#{drop_class}_active"
        %>

И это JavaScript, созданный jrails и jquery:

<script type="text/javascript">
//<![CDATA[
jQuery('#RemoveThisMember').droppable({accept:'.RolesUsersSelection', drop:function(ev,ui){
    if (confirm("This will remove User from this Group, are you sure?"))
    {jQuery.ajax({data:'u=' + encodeURIComponent($(ui.draggable).attr('id')), success:function(request){jQuery('#module_content').html(request);}, type:'post', url:'/of/projects/11/member_delete'});}
    }, hoverClass:'ProjectRoleDropDelete_active'})
//]]>
</script>

Я предполагаю, что это как-то связано с ($(this).attr('id')), но я не уверенчто еще там должно быть ... Спасибо,

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Я сделал то же самое в моем старом проекте.Он включал перетаскивание новостных панелей в 3 разных столбца.Вот javascript (jquery), который я использовал для перетаскивания:

$(function(){
    $( ".sortable" ).sortable({
            revert: true, 
            scroll: true,
            connectWith: '.sortable',
            placeholder: 'placeholder',
            forcePlaceholderSize: true,
            handle: $('h2'),
            stop: update_user,
            zIndex: 200,
            start: start_drag,
            appendTo: $('.sortable')
    });

 });

Вы можете проверить API Jquery UI для различных опций http://docs.jquery.com/UI/Sortable

Таким образом, действие javascript update_user будетсрабатывает, если объект отброшен

function update_user(){     

$.ajax({
   type: "POST",
   url: "/<controller>/<action>/",
   data: "data="+<data>",
   success: function(msg){
     alert( "Data Saved: " + msg );
   }
     });
}

В опции URL вы должны указать свой контроллер и действие, а также данные, которые вы хотите обработать в действии.В этом примере мы используем данные, и в вашем /// вы можете получить доступ к таким данным, как это

raise params[:data].inspect

Надеюсь, это поможет вам на вашем пути!

0 голосов
/ 10 января 2011

Какую версию jQuery (и jQueryUI) вы используете? Старая версия jQueryUI 1.6.x, похоже, имела ошибку, связанную с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...