鉴于目前的HTML5规范,允许创建自定义HTML元素(只要他们的名称中包含一个破折号),而事实上,Web组件似乎是一个功能,在这里留下来,我想知道为什么是创建自己的自定义HTML元素不满意?
请注意,我不是在问是否使用Web组件 - 它仍然是一个移动目标,即使像Polymer这样的大型polyfill也可能尚未准备好进行生产.我问的是创建自己的自定义HTML标记并设置样式,而不需要附加任何JS API.
我已经阅读了关于如何在Web应用程序中创建复合组件和自定义标签的各种博客文章和stackoverflow帖子,并且已经让事情正常工作.我现在正试图将所有内容移动到可重用的JAR文件中.
mylib.jar层次结构:
src/main/java
com.example.MyComposite.java
src/main/resources/
META-INF
faces-config.xml
my.taglib.xml
META-INF/resources/components
myComposite.xhtml
META-INF/tags
myTag.xhtml
Run Code Online (Sandbox Code Playgroud)
my.taglib.xml:
<facelet-taglib version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd">
<namespace>http://www.example.com/components</namespace>
<tag>
<tag-name>myTag</tag-name>
<source>
tags/myTag.xhtml
</source>
</tag>
<tag>
<tag-name>myComposite</tag-name>
<component>
<resource-id>
components/myComposite.xhtml
</resource-id>
</component>
</tag>
</facelet-taglib>
Run Code Online (Sandbox Code Playgroud)
我将它构建为一个jar并在我的web-app中使用它,自定义标记和复合组件都很好用.我花了100个不同的层次结构来让它工作.
我的问题是我不喜欢我似乎必须将自定义标签放在一个地方(/ tags)和复合组件放在另一个地方(/ resources/components).另外,我必须引用带有源标记的自定义标记和带有component/resource-id标记的复合组件.例如,我尝试将myTag.xhtml放入/ resources/components并使用resource-id引用它,但是当我尝试使用它时,我得到了NPE.
那么标签和组件必须在不同的目录中吗?我只需要忍受这种等级制度吗?
WACK说:
如果您觉得需要大量参数,请考虑创建CT.
...
CT比自定义功能更强大,更灵活.尝试将UDF用于简单的事情...将CT和组件用于更多涉及的过程,尤其是那些您可以将其视为离散动作而非简单"按摩"的过程
好的,但你通常如何做决定?有兴趣了解现实生活中的实践和例子.
对我来说,当一个函数有许多不需要的参数时,就会发生这种情况,因此我必须将它们称为myFunc(arg1 ="foo",arg2 ="bar").有时<cfmodule>语法变得更易读,但并非总是如此.
其他原因是我不喜欢长(例如,超过2个代码屏幕)UDF.
但所有这些想法都是非常主观的,这就是为什么我有兴趣阅读其他人的意见.也许有更好的规则?
提前致谢.
实现CFML自定义标记(不是CFX标记)有哪些常见用例?在我的CF exp 3年里,我从未写过一篇.有人请赐教,在哪个用例/情况下会选择自定义标签而不是cfc/udf?
我真的很喜欢使用普通<tag/>格式的标签"短暂关闭",但遗憾的是在浏览器中使用这种方法(即chrome)会导致非常意外的行为.
在文件中我有:
<div/><div/>
Run Code Online (Sandbox Code Playgroud)
它被解释为
<div>
<div></div>
<div>
Run Code Online (Sandbox Code Playgroud)
无论我使用什么DOCTYPE(XHTML)或HTML5,我都会以错误的方式得到它.我也在命名空间中使用这种"符号"来定制标记,<widget:aSampleWidgetA/> <widget:aSampleWidgetB/>这也引入了这个问题.
我不想使用完整的关闭符号,因为它在代码中造成了很多视觉混乱.有没有办法强制浏览器将这些标记解析为正确的XML?
自定义标记具有属性范围.凉.
我还看过其他一些应用程序(可能还有ColdBox?),其中开发人员将所有内容都放入属性结构中.例如login.cfm:
<cfparam name="attributes.username" default="some value">
除了必须指明attributes.foo哪些确实提高了可读性之外,还有一点要说明,但我承认为什么要重用一个完整范围的名称?
这是个人偏好还是我遗漏了属性范围的深刻内容?
我有一个自定义标签.我想使用jquery为自定义标记设置值.虽然看起来是一个愚蠢的问题,但我花了更多的时间来搜索结果.
我的标签是
<error:description code="12345" type="error" result="description" />${description}
Run Code Online (Sandbox Code Playgroud)
现在我想要获取该标记,并且必须使用jquery传递值.
请帮我怎么做.
我没有,things i tried area因为我甚至不知道如何开始.
提前致谢
在我的测试盒上,我有ColdFusion 10并且只分配了1gig:"最大JVM堆大小(以MB为单位)= 1024".
我有一个循环大约1000次的过程.每次循环迭代都会调用自定义标记〜200次.所以大约有200,000个电话.这个过程永远不会结束,我最终耗尽了记忆.我确定这是我在标签里面做的问题,而不是标签本身.但我想证明这一点.我跑这个测试,似乎ColdFusion的功能要快得多2.7secs,而不是14.6secs.测试只增加一个数字.
我的问题是:这似乎是一个有效的测试吗? 如果功能如此之快,那么尽可能使用它们而不是自定义标签是经验法则吗?
检测结果:
x = 0
Running good customtag 1000000 times...
x = 1000000
Time to complete: 14627
x = 0
Running good function 1000000 times...
x = 1000001
Time to complete: 2793
Run Code Online (Sandbox Code Playgroud)
good.cfm自定义标签:
<cfparam name="ATTRIBUTES.x" type="numeric" default="0">
<cfif thisTag.ExecutionMode eq "end">
<cfset request.x = ATTRIBUTES.x+1>
<cfset thistag.generatedcontent = "">
</cfif>
Run Code Online (Sandbox Code Playgroud)
测试代码:
<cffunction name="good" output="false" returntype="Numeric" access="private">
<cfargument name="numIn" type="numeric" required="true">
<cfset var x = 0>
<cfset x = arguments.numIn + …Run Code Online (Sandbox Code Playgroud) custom-tag ×8
coldfusion ×4
attributes ×1
browser ×1
function ×1
html5 ×1
jquery ×1
jsf-2.2 ×1
memory ×1
performance ×1
xml-parsing ×1