簡體   English   中英

ColdFusion Application.cfc&cfinvoke&THIS范圍

[英]ColdFusion Application.cfc & cfinvoke & THIS scope

在使用CF application.cfc時 - 需要創建一些vars(在本范圍內) - 例如this.name和this.applicationtimeout()等。

我遇到了一些我認為是奇怪行為的事情 - 希望有人可以解釋為什么會發生這種情況以及可能的解決方法。

有很多“THIS”變量可以用來設置應用程序特定的變量(當然你必須在CFADMIN中檢查“允許應用程序特定的變量” - 我做了)

其中一個是THIS.mappings - 這是一個映射數組 - MINE看起來像這樣:

this.path = GetDirectoryFromPath( GetCurrentTemplatePath() );
this.mappings = {
     '/files' = '#this.path#_my_files\'
     ,'/functions' = '#this.path#_my_functions\'
     ,'/logs' = '#this.path#_my_logs\'
};

它運行正常 - 當它被設置在application.cfc頂部的cfscript塊內時它工作正常 - 如果我把那個腳本塊放在它自己的文件中並在application.cfc中包含它

然而 - 試圖分割我的代碼 - 我想將我的所有應用程序設置放在settings.cfc中......(這里的想法是因為某些設置必須改變 - 我不必擔心'在哪里'看,我真的不想在我的app.cfc和settings.cfc中的其他應用程序或會話設置中分割這些內容。

所以我在settings.cfc中創建了一個名為getTHIS的方法,然后將腳本塊放在那里......然后使用

<cfinvoke component="settings"
          method="getTHIS" 
      returnvariable="THIS" 
    />

哪個工作 - 除了(似乎)映射...

this.name等,似乎都工作並設置 - 事實上this.mappings也設置得很好(所以看起來)如果我做了

<cfdump var="#THIS#" label="THIS" />

當我在app.cfc頁面上設置'字面'時,轉儲與THIS的轉儲相同。

但是 - 任何通過映射調用模板的嘗試都會產生一個標准“如果你想使用絕對路徑你必須創建一個映射等等......”

MY BIGGER的目標是(在應用程序啟動時)掃描目錄中的子目錄,並根據某些子目錄創建映射..但如果我不能將該功能抽象到它自己的功能中 - 我將被迫直接寫在app.cfc中(這不會殺了我,但同樣,我試圖在邏輯上對我的代碼進行分段......似乎有時間和地點可以設置這些映射的限制......是嗎?

所以我想最大的問題是 - 我可以通過外部方法設置this.mappings嗎? 我想我可以使用cfc調用恢復'我想要的設置',然后只需執行'set this.whatever = return form cfc' - (這可能是我的答案......)

謝謝

映射只能在'偽構造函數'中設置,而不能在Application.cfc中的任何方法內部設置 - http://adobe.ly/QN2oX1

您可以嘗試將this.mappings設置為CFC調用的結果(我無法想到為什么這不起作用),但如果它依賴於映射來執行此操作,則可能無法正常工作。

我沒有對此進行過測試,但我很確定如果你的application.cfc擴展你的settings.cfc它會工作。

component {
    public any function getMappings() {
        var mappings = {};
        //code to get your directories etc.
        return mappings;
    }
}

component extends="settings" {
    this.name = "xxxx";
    this.mappings = getMappings();
    ...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM