使用具有 Jquery 的模板更新视图的 Grails remoteFunction 可以识别模板中的元素

Posted

技术标签:

【中文标题】使用具有 Jquery 的模板更新视图的 Grails remoteFunction 可以识别模板中的元素【英文标题】:Grails remoteFunction updating view using templates which has Jquery does recognize elements from templates 【发布时间】:2012-07-06 04:49:53 【问题描述】:

我有一个带有按钮的视图,当它被点击时,它会调用 remoteFunction(ajax Call) 来更新一个带有 jQ​​uery 函数的模板的 div。但是那个 jQuery 函数不能识别更新后的 div 中的元素。因此 jQuery 函数无法正常工作以呈现视图。

我的观点看起来像

<input type="button" value="Something" id="someButton" class="button" onclick="someFunction()"/>
<div id="updateDiv"> </div>

js在按钮被点击时调用的样子

function someFunction() 
    $remoteFunction(controller:'myController', action:'someAction',update: 'updateDiv'
    );     
    functionForJQuery();

function functionForJQuery()
    var $someThing = $('.someClassName');

myController中,

def someAction= 
    //doSomething
    render (view:"/templates/_myTemplate")

最后是_myTemplatetemplate

<g:textField class="someClassName" value="someValue" />

但就像我上面所说的,当调用 functionForJquery 时,它无法识别该 textField。有人可以帮我解决这个问题吗?

我也尝试过 onComplete,或者在 remoteFunction 之后。

【问题讨论】:

【参考方案1】:

查看要在选择器中使用的 jQuery .on(jQuery 1.7 或更高版本)函数或 .delegate(1.7 之前)函数。这些将处理程序附加到页面首次加载或动态添加时存在的选定元素。像这样的:

function functionForJQuery()
    $('body').delegate(".someClassName", "click", function() 
       //do whatever here
    );

这会将函数附加到body 中的一个元素,该元素具有类someClassNameclick 事件。

【讨论】:

请注意,您可能会看到使用 .live() 的示例,但不推荐使用/不推荐使用它。更多信息请参见此处api.jquery.com/live【参考方案2】:

在你的控制器中,

试一试

  def someAction= 
  render template:"/templates/_myTemplate", model:model;
  

而不是

 def someAction= 
//doSomething
render (view:"/templates/_myTemplate")

祝你好运

【讨论】:

以上是关于使用具有 Jquery 的模板更新视图的 Grails remoteFunction 可以识别模板中的元素的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 django 模板中的不同提交按钮在更新视图中自定义成功 url?

jquery ajax get call 上的 django 视图呈现的错误 html 模板

带有 jquery 的 Django 模板:现有页面上的 Ajax 更新

如何在 Xamarin 中使用具有 android/IOS 特定视图的控制模板

ASP.NET MVC 主视图引用的js(jquery)在分部视图中无效,如何解决?

将 Django 分页器与具有不同显示数量的嵌套模板一起使用