2014-09-19 3 views
0

У меня есть требование, чтобы всякий раз, когда я нажимаю на день (в полнокалендарном порядке), мне нужно всплывать с подробностями. Мне нужно вызвать действие/контроллер, чтобы получить детали. У меня есть событие event.click в моем .js файле. Я пытаюсь использовать remoteFunction внутри моего полного jquery-календаря. Но grails не распознает вызов remoteFunction, и мой экран не работает (из-за недоступности шаблона .js). Пожалуйста, помогите мне, если это возможно,Как использовать remoteFunction внутри файла .js в grails

$(calId[calNo]).fullCalendar({ 
      header : { 
       left : ' ', 
       center : 'title', 
       right : ' ' 
      }, 
      defaultView: 'month', 
      selectable: true, 
      weekMode : 'variable',  
      eventColor : 'white', 
      editable : false, 
      year : eventYr, 
      month : calNo, 
      events : allocData, 

      dayRender: function (event, element, view) {       

       for (i = 0, l = holidayData.length; i < l; i++) { 
        var dateString = holidayData[i].substring(0,10); 
        view.element.find('.fc-day[data-date="' + dateString + '"]').css('background-color', '#FF9999'); 
        view.element.find('.fc-other-month').css('background-color', '#FFFFFF');     
       }    
      }, 
      eventRender: function(event, element, view) 
      { 
       if(event.start.getMonth() !== view.start.getMonth()) { return false; } 
      }, 
      eventClick: function(event) { 
        var selectedDate = String(event.start);     
        var newData = ${remoteFunction(controller: 'PreSchedule', action: 'calProcess')}; 
        alert(newData); 
        $('#dateAllocation #selectedDate').text(String(selectedDate).substring(0,10) + ' ,' + String(selectedDate).substring(28,33));  
        $('#dateAllocation').modal('show'); 
      }, 
      select: function(date) { 
        var selectedDate = date;     
        $('#dateAllocation #selectedDate').text(String(selectedDate).substring(0,10) + ' ,' + String(selectedDate).substring(28,33));  
        $('#dateAllocation').modal('show'); 

      } 


     }); 

Может быть я смешивания код на стороне сервера и на стороне клиента код, баловаться с основами. Заранее спасибо.

Вместо использования remotefunction я попытался использовать jquery.ajax/createLink. Но URL-адрес не разрешается.

$("#link").click(function(event){ 
      alert('link'); 
      event.preventDefault(); 
      date = '1985-01-01'; 
      $.ajax({ 
       url:'${createLink(controller:"Student",action:"checkLink")}', 
      // url:'/checkLink', 
       dataType: 'json', 
       type: 'POST', 
       //data: date,          
       success: function() { 
        console.log("The returned data is: "); 
        // show your modal, or do whatever you want. 
       } 
      }); 

Я вижу ошибку в инструментах разработчика браузера

Не удалось загрузить ресурс: сервер ответил со статусом 404 (не найден)

// smsFrontEnd/студент/$% 7BcreateLink (контроллер:% 22Student% 22, действие:% 22checkLink% 22)% 7D

, если это возможно, пожалуйста, помогите мне

+0

Вы пытаетесь загружать данные JSON или фрагмент HTML? –

+0

Спасибо за ответ, я пытался передать значение даты контроллеру, но сам вызов не происходит. – user3582387

+0

Хорошо, но ваш контроллер отправляет данные JSON или фрагмент HTML? Я спрашиваю, потому что подход к получению этих результатов несколько отличается. –

ответ

0

Я не думаю, что вы могли бы использовать Grails Ajax tag libs в .js-файлах.

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

http://grails.org/doc/latest/ref/Tags/remoteFunction.html

The formFunction tag and other Ajax related tags have been deprecated and will be removed from a future version of Grails. Applications may provide their own Ajax tags and/or Javascript plugins may provide Ajax tags of their own. 

http://en.wikipedia.org/wiki/Unobtrusive_JavaScript

Я думаю, вам лучше использовать jquery.Ajax вместо remoteFunction там.

0

Если ваш контроллер возвращает данные в формате JSON вы можете получить и использовать его следующим образом:

Вместо:

var newData = ${remoteFunction(controller: 'PreSchedule', action: 'calProcess')}; 
alert(newData); 

Использование метода JQuery $.ajax:

$.ajax({ 
    dataType: 'json', 
    url: '${createLink(controller: 'preSechedule', action: 'callProcess')}', 
    data: {}, // no parameters 
    success: function(data) { 
     window.alert("The returned data is: "+data); 
     // show your modal, or do whatever you want. 
    } 
}); 
+0

Спасибо за ваш ответ. Я попробую и вернусь. – user3582387

+0

Я использовал выше, но все же как-то, когда я сохраняю и запускаю проект, это не распознавая шаблон, и мой экран не работает (без шаблона). Я должен использовать что-то, чтобы сделать ajax доступным. У меня есть jquery-плагин на месте. Возможно, вы можете помочь мне ... – user3582387

+0

eventClick: function (event) { \t \t \t var selectedDate = String (event ,Начало); предупреждение ('madhu'); \t \t/* \t $ .ajax ({ \t \t \t \t DATATYPE: 'JSON', \t \t \t \t URL: "$ {createLink (контроллер: 'preSechedule', действие: 'callProcess')}", \t \t \t \t данные: {}, // без параметров \t \t \t \t успех: \t \t \t \t window.alert («Возвращенные данные: успех»); \t \t \t \t ошибка: \t \t \t \t window.alert ("Возвращенный данные: ошибка"); \t \t \t \t // Покажите свой мод или сделайте все, что захотите. \t \t \t \t \t \t \t \t}); */ – user3582387

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