如何在 knockoutjs+requirejs 中维护应用范围的数据



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

这是我存储所有 REST API 和应用程序范围数据的地方。(类似于 store in react redux(

数据服务.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: ''
        }
    }
});

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

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

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

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

document.dataService = new dataService();

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

最新更新