在CF8中,我有一个工作的cftree,每个节点都有一个RSS提要(多个节点)。问题是,我目前没有使用绑定,这意味着所有提要都是在加载页面时读取的,这需要很长时间。我想要做的是将cftreeitem绑定到cfc,以便只有当用户选择父cftreeitem而不是页面加载时才读取提要。页面不会抛出错误,但是提要的子节点都不会显示在父节点下面。
cfm:
<cfform name="RSS_exercise">
<cftree name="Xfeeds" format="html" cache="no">
<cftreeitem value="elite" display="<div style='color:##4c4c4c'>ELITE FTS</div>" queryasroot="true" expand="no">
<cftreeitem value="" bind="cfc:components.rssQ.getEliteRSS({cftreeitempath}, {cftreeitemvalue})">
</cftree>
</cfform>
cfc:
<cffunction name="getEliteRSS" access="remote" returntype="any" hint="gets EliteFTS RSS feed">
<cfargument name="itemPath" type="string" required="false"/>
<cfargument name="itemValue" type="string" required="false"/>
<cffeed source="http://feeds2.feedburner.com/EliteftsArticles" properties="eliteProps" query="eliteRSS">
<cfset var feedArray = ArrayNew(1) />
<cfset var feed = StructNew() />
<cfset var i = 1 />
<cfoutput query="eliteRSS">
<cfset feed.value = "" />
<cfset feed.display = "#title# <div style='color:gray'>Published: #DateFormat(publisheddate)#</div><br/>" />
<cfset feed.href = "#rsslink#" />
<cfset feed.target = "_blank" />
<cfset feed.parent = "elite" />
<cfset feed.queryAsRoot = "false" />
<cfset feed.expand = "no" />
<cfset feedArray[i] = Duplicate(feed) />
<cfset var i = "i++" />
</cfoutput>
<cfreturn feedArray />
</cffunction>非常感谢您的帮助。
做了以下更改,现在得到输出,但是它是嵌套/循环的,而且我无法获得顶层父节点,因此它们并不都是平坦的。这样做的目的是要有一个父级在检查之前不会加载提要。
cfm
<cfform name="RSS_exercise">
<cftree name="Xfeeds" format="html" cache="no">
<cftreeitem bind="cfc:components.rssQ.getEliteRSS({cftreeitempath}, {cftreeitemvalue})">
</cftree>
</cfform>
cfc
<cffunction name="getEliteRSS" access="remote" returntype="array" output="no" hint="gets EliteFTS RSS feed">
<cfargument name="itemPath" type="string" required="false"/>
<cfargument name="itemValue" type="string" required="false"/>
<cfset var feedArray = ArrayNew(1) />
<cfset var feed = StructNew() />
<cfset var i = 1 />
<cffeed source="http://feeds2.feedburner.com/EliteftsArticles" properties="eliteProps" query="eliteRSS">
<cfloop query="eliteRSS">
<cfset StructClear(feed) />
<cfset feed.value = "1" />
<cfset feed.display = "#title# <div style='color:gray'>Published: #DateFormat(publisheddate)#</div><br/>" />
<cfset feed.href = "#rsslink#" />
<cfset feed.target = "_blank" />
<cfset feed.parent = "elite" />
<cfset feed.queryAsRoot = "false" />
<cfset feed.expand = "no" />
<cfset feedArray[i] = Duplicate(feed) />
<cfset i++ />
</cfloop>
<cfreturn feedArray />
</cffunction>发布于 2010-01-02 16:01:02
我的第一个问题是没有对提要中的所有项使用leafnode=true属性。然后,我下一个最大的问题是没有正确地设置arguments.value,所以所发生的是,每次选择一个节点时,它都会触发cfc,这再次重复了cffeed。以下是我所希望的cfc代码:
<cffunction name="getEliteRSS" access="remote" returntype="array" output="no" hint="gets EliteFTS RSS feed">
<cfargument name="path" required="true"/>
<cfargument name="value" required="true"/>
<cfset var feedArray = ArrayNew(1) />
<cfset var feed = StructNew() />
<cfif arguments.value IS "">
<cfset feed.value = "elite" />
<cfset feed.display = "<div style='color:##4c4c4c'>ELITE FTS</div>" />
<cfset feed.leafnode = "false" />
<cfset feed.expand = "no" />
<cfset ArrayAppend(feedArray, feed) />
<cfelse>
<cffeed source="http://feeds2.feedburner.com/EliteftsArticles" properties="eliteProps" query="eliteRSS">
<cfloop query="eliteRSS">
<cfset feed = {} />
<cfset feed.value = "" />
<cfset feed.leafnode = "true" />
<cfset feed.display = "#title# <div style='color:gray'>Published: #DateFormat(eliteRSS.publisheddate)#</div><br/>" />
<cfset feed.href = "#rsslink#" />
<cfset feed.target = "_blank" />
<cfset feed.parent = "elite" />
<cfset feed.queryAsRoot = "false" />
<cfset ArrayAppend(feedArray, feed) />
</cfloop>
</cfif>
<cfreturn feedArray />
</cffunction>发布于 2010-01-02 11:32:02
首先,你必须检查两件事:
在CFC中,您应该使用提供的参数来过滤提要中的数据。可能是QoQ在获取的数据上。
也很少有关于服务器端代码的注释。
您不必在任何地方使用#,但您应该使用显式范围:
<cfset feed.href = "#rsslink#" />
<cfset feed.href = eliteRSS.rsslink />您不必复制结构并跟踪索引。这可以简单得多:
<cfloop query="eliteRSS">
<cfset feed = {} />
...
<cfset ArrayAppend(feedArray, feed) />
</cfloop> https://stackoverflow.com/questions/1989216
复制相似问题