简体   繁体   English

Bootstrap Popover与Grails和Ajax

[英]Bootstrap popover with grails and ajax

just trying to use ajax formRemote in a BS popover. 只是尝试在BS popover中使用ajax formRemote。 A simple form works, but the ajax implementation not: 一个简单的形式可以,但是ajax实现不行:

1) gsp code 1)gsp代码

    <div id="addfolder">
            <a href="#" class="btn" id="nrfolder" rel="popover">
            <i class="icon-folder-close icon-large"></i></a><%--<g:message code="folder"  args="[entityName]" default="New Folder"/>--%></a>
        </div>
        <div id="newRootFolder" style="display:none;">
        <form class="form-inline" style="width:280px;">
        <g:formRemote name="createRootFolder" url="[controller:'folders',action:'create']" onLoading="showModalSpinnerNewFolder();" onComplete="hideModalSpinnerNewFolder();" onSuccess="doResponseNewFolder(data);" >
              <g:textField  name="folderName" class="input-small" type="text" placeholder="New folder"/>
              <input type="submit" value="Create" class="btn btn-info" />
              <a href="#" class="btn"  onclick="$('#nrfolder').popover('hide')"/>Cancel</a>
        </g:formRemote>
</g:formRemote>
    </form>
    </div>

2) Popover call with jquery 2)用jQuery弹出调用

$('#nrfolder').popover({placement:'right',title:'New Root Folder',html:true,content: function() { return $('#newRootFolder').html();} });

3) jquery success event: doResponseNewFolder function 3)jQuery成功事件:doResponseNewFolder函数

function doResponseNewFolder(data) {
        alert('toto' + data.success);
        if (data.success == 'true') {
            var msg = data.msg;
            // reload tree view
            $('#tree').dynatree('getTree').reload();
        } else {
            var msg = $('<ul class="errors">');
            for (var i = 0; i < data.errorList.length; i++) {
                msg.append('<li>' + data.errorList[i] + "</li>");
            }
        }
        $('#new_folder_msg').html(msg);
        $('#new_folder_msg').show();
    }

Any idea? 任何想法?

It seems you're messing up with forms, let me explain: Grails' g:formRemote is a helper for making ajax web forms, so if you look at the resulting HTML there will be a form generated at the call. 看来您正在弄乱表单,让我解释一下:Grails的g:formRemote是制作Ajax Web表单的助手,因此,如果查看生成的HTML,则在调用时将生成一个表单。

The fact is that you already opened a form, which isn't valid HTML syntax. 事实是您已经打开了一个无效的HTML语法表单。 That first form should not exist. 第一种形式不应该存在。 You can give its attributes to your g:formRemote though and Grails will pass them to your generated form : 您可以将其属性提供给g:formRemote ,Grails会将它们传递给生成的form

<g:formRemote class="form-inline" style="width:280px;" name="createRootFolder" url="[controller:'folders',action:'create']" onLoading="showModalSpinnerNewFolder();" onComplete="hideModalSpinnerNewFolder();" onSuccess="doResponseNewFolder(data);" >
      <g:textField  name="folderName" class="input-small" type="text" placeholder="New folder"/>
      <input type="submit" value="Create" class="btn btn-info" />
      <a href="#" class="btn"  onclick="$('#nrfolder').popover('hide')"/>Cancel</a>
</g:formRemote>

This, with no other forms imbricated, will be enough. 这没有任何其他形式的约束就足够了。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM