如何在knockoutjs + requirejs中维护app广泛的数据

时间:2017-06-09 10:55:56

标签: javascript knockout.js requirejs oracle-jet

在我的项目中,我需要为应用程序中的所有模块维护一个公共数据对象。

这是我存储所有REST API和 app wide data 的地方。 (像反应还原中的商店那样)

dataService.js

define(['jquery', 'app'], function($, app) {


    var url = app.serviceURL;

    function loginUser(data) {
        data.type = "login";
        return $.ajax({
            url: url + '/authentication.php',
            data: data,
            method: "POST"
        });
    };

    function logoutUser(data) {
        data.type = "logout";
        return $.ajax({
            url: url + '/authentication.php',
            data: data,
            method: "POST"
        });
    };

    return {
        actions: {
            loginUser: loginUser,
            logoutUser: logoutUser
        },
        user: {
            isLoggedIn: ''
        }
    }
});

我要求dataService.js个文件中的ViewModel个文件来调用loginlogout个服务。

dataService.actions.loginUser(data)
                .then(function(data) {
                    dataService.user.isLoggedIn = true; // I changed the app wide data here                    
    }
                });

我的问题是,当我在其他ViewModel中需要dataService时,dataService.user.isLoggedIn的值被设置为默认值。如何将其保存为app宽数据?

1 个答案:

答案 0 :(得分:-1)

它可能为每个模块实例化一个新对象。您可以通过执行以下操作来创建全局变量:

document.dataService = new dataService();

尝试使用上述方法。这可能会解决您的问题。