2014-09-13 84 views
0

我目前在ColdFusion 9(cfscript)中構建了自己的MVC,由於某些原因,我在創建的基本模型中遇到了一些麻煩。爲什麼我的屬性不能在cfscript中設置?

public function init(required itemName){ 
    var columns = {}; 
    var result = ''; 
    var type = ''; 
    var length = ''; 
    var key = ''; 
    var field = ''; 
    var allowNull = ''; 

    setModel(itemName); 

    this.table = this.model.tableName(); 

    this.qdb = request.qwerkfactory.newQDB(); 
    this.qdb.init(tableName = this.table); 
    this.qdb.getTableAttributes(); 
    this.result = this.qdb.execute().getResult(); 

    for(i = 1; i LT this.result.recordcount; i++){ 
     result = this.result; 

     type = ReReplaceNoCase(result['type'][i], '[0-9()]', '', 'all'); 
     length = ReReplaceNoCase(result['type'][i], '[a-z()]', '', 'all'); 
     key = (len(result['key'][i])) ? result['key'][i] : false; 
     field = result['field'][i]; 
     allowNull = result['null'][i]; 

     columns["#field#"] = {}; 
     columns["#field#"].type = "#type#"; 
     columns["#field#"].length = "#length#"; 
     columns["#field#"].key = "#key#"; 
     columns["#field#"].null = "#allowNull#"; 
    } 

    setTableAttributes(columns); 

    return this.model; 
} 

這是我的方法,充當我的模型組件的構造方法。它正在爲特定的表創建表模式,然後將其返回給繼承此基類的模型。不過,我已經定義了組件調用TableColumn來的屬性,當我在一個setter方法進行設置:

public function setTableAttributes(required struct attr){ 
    this.tableColumns = arguments.attr; 
} 

它將它所罰款在這一點上,當我writeDump()this.tableColumns它返回正確的結果。但是,當使用getter時,它表示tableColumns在此處未定義。我究竟做錯了什麼?

+0

此外,QDB是我的數據庫抽象層的框架,這是我的代碼液滴中的參考。 – davidbenjamin998 2014-09-13 16:53:53

+0

當你說你正在使用getter,你是說你有一個函數返回'this.tableColumns'? – 2014-09-14 07:01:32

回答

2

問題在於使用範圍this。 CFC的屬性存儲在CFC的variables範圍內,該範圍不同於this

只需將上面的代碼更改爲使用variables範圍而不是this範圍,並且您的獲得者將按預期工作。

相關問題