为什么我的属性不会在cfscript中设置?

时间:2014-09-13 16:53:13

标签: coldfusion coldfusion-9 cfml

我目前正在ColdFusion 9(cfscript)中构建自己的MVC,由于某种原因,我在我创建的基本模型中遇到了一些麻烦。

    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;
}

这是我的方法,它充当我的Model组件的构造方法。它正在做的是为特定表创建表模式,然后将它返回到继承此基类的模型。但是,我在setter方法中设置了一个名为tableColumns的组件的属性:

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

此时它设置正常,当我writeDump()this.tableColumns它返回正确的结果。但是当使用getter时,它表示tableColumns未定义。到底是我做错了什么?

1 个答案:

答案 0 :(得分:2)

问题在于您使用this范围。 CFC的属性存储在CFC的variables范围内......与this不同。

只需更改上面的代码即可使用variables范围代替this范围,您的getter将按预期工作。