Очистка отдельных кэшированных фрагментов страницы - PullRequest
1 голос
/ 25 ноября 2011

Я не уверен, если это возможно ..

Я динамически генерирую строки таблицы и хочу кэшировать каждую строку как фрейм страницы ... например,

<cfloop index="i" from="1" to="10">
    <cfcache id="tableRow_#i#">
        <tr><td>..some stuff..</td></tr>
    </cfcache>
</cfloop>

Затем вдругой код, в совершенно другой части Приложения, я хочу иметь возможность сбрасывать отдельные фрагменты ... например, если я хочу сбросить 'tableRow_2' ..

<cfcache action="flush" id="tableRow_3">

Может кто-нибудь сказать мне, еслиэтот тип детализации возможен, и если да, то каким будет наилучший подход.

Самое близкое, что мне удалось найти, это <cflush expireURL="..">, но это сбрасывает все кеши на странице ... где мне нужноиметь возможность сбрасывать отдельные кэши на странице.

Большое спасибо заранее!

Джейсон

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

Один из способов справиться с этим - через кеш-пул области приложения.Например:

<cfif not IsDefined("application.cachePool")>
  <cfset application.cachePool = {}>
</cfif>

<cfloop index="i" from="1" to="10">
    <!---<cfcache id="tableRow_#i#">--->
    <cfif not StructKeyExists(application.cachePool, "tableRow_#i#")>
        <cfsavecontent variable="cacheTmp"><tr><td>..some stuff..</td></tr></cfsavecontent>
        <cfset application.cachePool["tableRow_#i#"] = cacheTmp>
    </cfif>
    #application.cachePool["tableRow_#i#"]#
    <!---</cfcache>--->
</cfloop>

Затем в другом месте приложения вы можете использовать StructDelete:

StructDelete(application.cachePool, "tableRow_3")
0 голосов
/ 29 ноября 2011

Если вы используете CF9, тег cfcache имеет атрибут "id". Таким образом, вы можете точно сказать, что вы имели в своем примере:

<cfcache action="flush" id="tableRow_3">

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...