首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RSS读cfc绑定到cftreeitem

将RSS读cfc绑定到cftreeitem
EN

Stack Overflow用户
提问于 2010-01-01 18:19:49
回答 2查看 497关注 0票数 1

在CF8中,我有一个工作的cftree,每个节点都有一个RSS提要(多个节点)。问题是,我目前没有使用绑定,这意味着所有提要都是在加载页面时读取的,这需要很长时间。我想要做的是将cftreeitem绑定到cfc,以便只有当用户选择父cftreeitem而不是页面加载时才读取提要。页面不会抛出错误,但是提要的子节点都不会显示在父节点下面。

代码语言:javascript
复制
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>

非常感谢您的帮助。

做了以下更改,现在得到输出,但是它是嵌套/循环的,而且我无法获得顶层父节点,因此它们并不都是平坦的。这样做的目的是要有一个父级在检查之前不会加载提要。

代码语言:javascript
复制
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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-02 16:01:02

我的第一个问题是没有对提要中的所有项使用leafnode=true属性。然后,我下一个最大的问题是没有正确地设置arguments.value,所以所发生的是,每次选择一个节点时,它都会触发cfc,这再次重复了cffeed。以下是我所希望的cfc代码:

代码语言:javascript
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 2010-01-02 11:32:02

首先,你必须检查两件事:

  1. 确保返回JSON编码的数组(请参阅手册)。
  2. 在Firefox中安装Firebug,并使用Console选项卡跟踪准确的请求和响应。

在CFC中,您应该使用提供的参数来过滤提要中的数据。可能是QoQ在获取的数据上。

也很少有关于服务器端代码的注释。

您不必在任何地方使用#,但您应该使用显式范围:

代码语言:javascript
复制
<cfset feed.href = "#rsslink#" />
<cfset feed.href = eliteRSS.rsslink />

您不必复制结构并跟踪索引。这可以简单得多:

代码语言:javascript
复制
<cfloop query="eliteRSS">
    <cfset feed = {} />
    ...
    <cfset ArrayAppend(feedArray, feed) />
</cfloop>  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1989216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档