如何在grails中的.js文件中使用remoteFunction

时间:2014-09-19 09:16:49

标签: javascript jquery grails groovy

我有要求,每当我点击一天(在完整日历中),我需要弹出一个详细信息。我需要触发一个动作/控制器来获取细节。我在我的.js文件中有我的event.click。我一直在尝试在完整的日历jquery中使用remoteFunction。但是grails没有识别remoteFunction调用,而且我的屏幕出错(因为.js模板不可用)。请尽可能帮助我,

$(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');   

            }


        });

可能是我正在混合服务器端代码和客户端代码,搞乱基础知识。提前谢谢。

我尝试使用jquery.ajax / createLink,而不是使用远程功能。但网址没有得到解决。

  $("#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

如果可能的话,请帮帮我

2 个答案:

答案 0 :(得分:0)

我认为你不能在.js文件中使用grails ajax tag libs。

但是,除此之外,这些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。

答案 1 :(得分: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.
    }
});