【问题标题】:How to maintain app wide data in knockoutjs+requirejs如何在 knockoutjs+requirejs 中维护应用范围的数据
【发布时间】:2017-11-11 08:46:43
【问题描述】:

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

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

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: ''
        }
    }
});

我需要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 的值被设置为默认值。如何将其保存为应用范围的数据?

【问题讨论】:

  • 我不太确定,但在我看来,您每次调用 dataService 时都会创建一个新实例,在其中创建初始“应用程序”,将其存储在全局引用变量中,以便您可以叫那个。

标签: javascript knockout.js requirejs oracle-jet


【解决方案1】:

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

document.dataService = new dataService();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 2014-12-13
    • 2014-07-18
    • 2018-07-22
    相关资源
    最近更新 更多