2

良い一日、

データアクセスを管理するオブジェクトを作成しました。私のアプリはいくつかの異なるデータストアを使用するため、プロバイダーを切り替えるための簡単なファクトリを作成しました。

var dataProvider = {
company: {
    getAllCompanies: function (callback) {
        var impl = factory.createProvider(implInstance.current)
        impl.company.getAllCompanies(callback);
    }
}
projects: {
    getAllProjects: function (callback) {
        var impl = factory.createProvider(implInstance.current)
        impl.projects.getAllProjects(callback);
    }
}
}

それはすべてうまくいっていますが、dataProviderレベルでimpl変数を使用したいと思います。ネストが非常に深い場合、「これ」では適切なスコープが提供されないため、適切にアクセスする方法がわかりません。次のようなものが欲しいのですが。

var dataProvider = {
impl: function () { return factory.createProvider(implInstance.current) },
company: {
    getAllCompanies: function (callback) {
        //THIS WON'T WORK
        this.impl.company.getAllCompanies(callback);
    }
}

ありがとう!

4

1 に答える 1

4

これには、モジュールデザインパターンを使用する必要があります。

var dataProvider = (function () {
    var getImpl = function () {
        return factory.createProvider(implInstance.current);
    };
    return {
        company: {
            getAllCompanies: function (callback) {
                getImpl().company.getAllCompanies(callback);
            }
        },
        projects: {
            getAllProjects: function (callback) {
                getImpl().projects.getAllProjects(callback);
            }
        }
    }
})();
于 2012-06-27T14:44:23.627 に答える