【问题标题】:Attributes scope vs attributes structure属性范围与属性结构
【发布时间】:2012-11-20 15:44:55
【问题描述】:

自定义标签具有属性范围。很酷。

我还看到了一些其他应用程序(可能还有 ColdBox?),其中开发人员将所有内容都放入属性结构中。比如login.cfm:

<cfparam name="attributes.username" default="some value">

我承认,除了必须指定 attributes.foo 这确实提高了可读性之外,还有其他意义,但为什么要重用完整范围的名称?

这是个人偏好还是我错过了属性范围的一些深刻的东西?

【问题讨论】:

    标签: coldfusion attributes custom-tag


    【解决方案1】:

    这没什么深奥的。许多框架(和个人开发人员)喜欢将表单和 url 范围组合成一个“事件”对象或其他东西(就像你的“属性”示例),但它并没有真正给你带来太多好处。

    也就是说,在现有范围之后命名新对象是错误的,我建议不要这样做。当您想要超出属性范围而不是属性对象时会发生什么?

    您总是可以通过 variables.attributes.foo 引用该对象以获得明确性,但这很痛苦而且有点难看。当然,没有什么能阻止您访问属性范围(范围优先级会在 variables.attributes 之前检查属性),但是在您之后必须阅读代码的人会更加困惑。它本质上是制造问题而不是解决问题。

    【讨论】:

    • 我下面的回答有详细信息
    【解决方案2】:

    在 Fusebox 中,想法是单个文件可以用作框架的一部分,也可以用作 cfmodule 的一部分。 corefiles/application.cfc 里面是:

    ...
    <cfparam name="variables.attributes" default="#structNew()#" />
    <cfif isDefined("URL")>
        <cfset structAppend(attributes,URL,true) />
    </cfif>
    <cfif isDefined("form")>
        <cfset structAppend(attributes,form,true) />
    </cfif>
    ...
    

    详情请见GitHub

    【讨论】:

    • 詹姆斯,我没看到你指的是什么?那个链接根本没有提到 cfmodule?
    • 一般来说,但尤其是在这种情况下,将相关文本直接引用到您的答案中很有用(使用&gt; 标记引用),当然仍然包括归属的URL。
    猜你喜欢
    • 2022-01-15
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多