如何从 grails RemoteLink 更新 TextField?

发布于 2024-08-25 19:19:45 字数 747 浏览 12 评论 0原文

现有标记:

<g:textField name="identifier"/>
<g:remoteLink action="newId" update="identifier">generate new id</g:remoteLink>

相应的 HTML 标记:

<input type="text" id="identifier" name="identifier">
<a onclick="new Ajax.Updater('guid','/webapp/domain/newId',{asynchronous:true,evalScripts:true});return false;" href="/webapp/domain/newId">generate</a>

单击链接时生成的 HTML 标记:

<input type="text" id="identifier" name="identifier">THE-NEW-ID-HERE</input>
<a onclick="new Ajax.Updater('guid','/webapp/domain/newId',{asynchronous:true,evalScripts:true});return false;" href="/webapp/domain/newId">generate</a>

Existing markup:

<g:textField name="identifier"/>
<g:remoteLink action="newId" update="identifier">generate new id</g:remoteLink>

Corresponding HTML markup:

<input type="text" id="identifier" name="identifier">
<a onclick="new Ajax.Updater('guid','/webapp/domain/newId',{asynchronous:true,evalScripts:true});return false;" href="/webapp/domain/newId">generate</a>

The HTML markup it generates when the link is clicked:

<input type="text" id="identifier" name="identifier">THE-NEW-ID-HERE</input>
<a onclick="new Ajax.Updater('guid','/webapp/domain/newId',{asynchronous:true,evalScripts:true});return false;" href="/webapp/domain/newId">generate</a>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半山落雨半山空 2024-09-01 19:19:45

尝试

<div id="updatableArea">
  <g:textField name="identifier"/>
</div>
<g:remoteLink action="newId" update="updatableArea">generate new id</g:remoteLink>

在您的控制器中返回 HTML 片段

render(text:"<input type='text' id='identifier' name='identifier'>${newid}</input>", contentType:'text/html')

RemoteLink 将仅更新节点的内容,因此不会更新文本字段的“值”。

希望有帮助。

Try

<div id="updatableArea">
  <g:textField name="identifier"/>
</div>
<g:remoteLink action="newId" update="updatableArea">generate new id</g:remoteLink>

In your controller return the HTML fragment

render(text:"<input type='text' id='identifier' name='identifier'>${newid}</input>", contentType:'text/html')

The remoteLink will simply update the contents of the node so it won't update the "value" of the textfield.

Hope that helps.

赤濁 2024-09-01 19:19:45

使用 onSuccess 事件的另一种方法:

def getName = {
   def exchange = Exchange.findById(params.id)
   if (!exchange) {
      render 'not found'
   }
   else {
      render(builder: "json") {
         exchange
      }
   }
}
...
<script>
   function fillName(e) {
      var obj = toJson(e);
      $('name').value = obj.name;
   }

   function toJson(obj) {
      return eval('(' + e.responseText + ')');
   }
</script>
...
<g:remoteLink action="getName" id="1" onSuccess="fillName(e)">
   Get
</g:remoteLink>
<input type='text' name='name' id='name'/>

Another way using the onSuccess event:

def getName = {
   def exchange = Exchange.findById(params.id)
   if (!exchange) {
      render 'not found'
   }
   else {
      render(builder: "json") {
         exchange
      }
   }
}
...
<script>
   function fillName(e) {
      var obj = toJson(e);
      $('name').value = obj.name;
   }

   function toJson(obj) {
      return eval('(' + e.responseText + ')');
   }
</script>
...
<g:remoteLink action="getName" id="1" onSuccess="fillName(e)">
   Get
</g:remoteLink>
<input type='text' name='name' id='name'/>
辞别 2024-09-01 19:19:45

只需将以下内容添加到remoteLink:

onSuccess="\$('identifier').value=e.responseText;"

因此最终结果(完美运行):

<g:textField name="identifier"/>
<g:remoteLink action="newId" onSuccess="\$('identifier').value=e.responseText;">generate new id</g:remoteLink>

需要注意的两件事:

  1. 由于 $ 必须转义
    'grails' 处理
    属性。
  2. 我正在使用 Prototype javascript 库。其他库可能有不同的语法,但基本思想是相同的。

just add the following to the remoteLink:

onSuccess="\$('identifier').value=e.responseText;"

So the final result (which works perfectly):

<g:textField name="identifier"/>
<g:remoteLink action="newId" onSuccess="\$('identifier').value=e.responseText;">generate new id</g:remoteLink>

2 things to note:

  1. the $ must be escaped due to the
    'grails' processing of that
    attribute.
  2. I'm using the Prototype javascript library. Other libraries may different syntax, but the basic idea is the same.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文