我正在创建一个带有标签lib的小部件,它取决于将许多JavaScript推送到浏览器。我已经将所有内容都以文本形式写在taglib中,并用< <来推出它,但是我认为如果我拉出脚本并将其作为 assets 包含进来会更干净。但是,在弄清楚如何从taglib中的grails代码中分离javascript时遇到了一些麻烦

我正在尝试做的一个简化示例-可以说一个显示用户名的“名称”标签,但是当您单击它时,它会提醒用户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中,我可以写:
<foo:name username="${user.name}" uid="${user.id}"></foo:name> 

我不知道如何将click函数从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>


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!