Grails 在 taglibs 和 javascripts 之间传递参数
Grails passing parameters between taglibs and javascripts
我正在创建一个带有标签库的小部件,这取决于将大量 javascript 推送到浏览器。我把它全部写在标签库中作为文本,并用 << 推送它,但我认为如果我取出脚本并将其作为资产包含在内会更清晰。但是,在弄清楚如何将 javascript 与 taglib
中的 grails 代码分开时遇到了一些麻烦
我正在尝试做的事情的简化示例——假设一个显示用户名的 'name' 标签,但是当您单击它时会提醒用户 ID:
作为标签我可以这样写:
class FooTagLib {
static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static namespace = 'foo'
def name = {attrs, body ->
out << "<p id = ${attrs.uid}>${attrs.username}</p>"
out << "<script type='text/javascript'>"
out << """
$('#{$attrs.uid}.click( function() {
alert("ID for user ${attrs.username} is ${attrs.uid}); });
"""
}
}
然后在我的 gsp 中我可以 write:a
<foo:name username="${user.name}" uid="${user.id}"></foo:name>
我想不通的是如何将点击功能从 taglib 中提取到 javascript 库中,这样我就可以将 FooTagLib 变成这样:我如何传递 attrs.username 和attrs.uid 所以它可以在 javascript 文件中访问?
class FooTagLib {
static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static namespace = 'foo'
def name = {attrs, body ->
out << "<p id = ${attrs.uid}>${attrs.username}</p>"
out << "<asset: type='text/javascript'>"
out << "<asset:javascript src='footag.js'/>
}
}
我完成此操作的一种方法是使用 Jquery data.
这样写你的标签:
out << "<p id='my-p-with-data' data-id='${attrs.uid}' data-name='${attrs.username}'>${attrs.username}</p>"
您呈现的 HTML 是:
<p id='my-p-with-data' data-id='5' data-name='John Doe'>John Doe</p>
然后,你需要使用JS:
alert("ID for user "+$('#my-p-with-data').data( 'name' ) + " is " + $('#my-p-with-data').data( 'id' ))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id='my-p-with-data' data-id='5' data-name='John Doe'>John Doe</p>
我正在创建一个带有标签库的小部件,这取决于将大量 javascript 推送到浏览器。我把它全部写在标签库中作为文本,并用 << 推送它,但我认为如果我取出脚本并将其作为资产包含在内会更清晰。但是,在弄清楚如何将 javascript 与 taglib
中的 grails 代码分开时遇到了一些麻烦我正在尝试做的事情的简化示例——假设一个显示用户名的 'name' 标签,但是当您单击它时会提醒用户 ID:
作为标签我可以这样写:
class FooTagLib {
static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static namespace = 'foo'
def name = {attrs, body ->
out << "<p id = ${attrs.uid}>${attrs.username}</p>"
out << "<script type='text/javascript'>"
out << """
$('#{$attrs.uid}.click( function() {
alert("ID for user ${attrs.username} is ${attrs.uid}); });
"""
}
}
然后在我的 gsp 中我可以 write:a
<foo:name username="${user.name}" uid="${user.id}"></foo:name>
我想不通的是如何将点击功能从 taglib 中提取到 javascript 库中,这样我就可以将 FooTagLib 变成这样:我如何传递 attrs.username 和attrs.uid 所以它可以在 javascript 文件中访问?
class FooTagLib {
static encodeAsForTags = [tagName: [taglib:'html'], otherTagName: [taglib:'none']]
static namespace = 'foo'
def name = {attrs, body ->
out << "<p id = ${attrs.uid}>${attrs.username}</p>"
out << "<asset: type='text/javascript'>"
out << "<asset:javascript src='footag.js'/>
}
}
我完成此操作的一种方法是使用 Jquery data.
这样写你的标签:
out << "<p id='my-p-with-data' data-id='${attrs.uid}' data-name='${attrs.username}'>${attrs.username}</p>"
您呈现的 HTML 是:
<p id='my-p-with-data' data-id='5' data-name='John Doe'>John Doe</p>
然后,你需要使用JS:
alert("ID for user "+$('#my-p-with-data').data( 'name' ) + " is " + $('#my-p-with-data').data( 'id' ))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id='my-p-with-data' data-id='5' data-name='John Doe'>John Doe</p>