Asp.net mvc 4 使用Durandal的会话数据

Asp.net mvc 4 使用Durandal的会话数据,asp.net-mvc-4,durandal,Asp.net Mvc 4,Durandal,我刚刚开始使用Durandal.js,所以请原谅我的愚蠢提问 当用户向应用程序发出第一个请求时,会要求用户选择一种“配置文件类型”,并且我需要它能够被网站中的其他所有视图模型访问,我首先想到的是在shell viewmodel中创建此属性,但不知道如何做 在Durandal SPA中以类似会话的模式存储数据的最佳方式是什么 谢谢 为需要存储的数据创建amd模块 然后只需要将该模块作为任何其他需要它的模块的依赖项 有点像这样: 会话模块 其他模块 编辑** AMD模块的存在是为了不污染窗口对象的全

我刚刚开始使用Durandal.js,所以请原谅我的愚蠢提问

当用户向应用程序发出第一个请求时,会要求用户选择一种“配置文件类型”,并且我需要它能够被网站中的其他所有视图模型访问,我首先想到的是在shell viewmodel中创建此属性,但不知道如何做

在Durandal SPA中以类似会话的模式存储数据的最佳方式是什么


谢谢

为需要存储的数据创建amd模块

然后只需要将该模块作为任何其他需要它的模块的依赖项

有点像这样:

会话模块 其他模块 编辑** AMD模块的存在是为了不污染窗口对象的全局名称空间。但是,如果您不希望将会话作为依赖项,而只是通过一个全局变量访问它,那么这是非常好的

如果您愿意,可以在
shell.js
中声明它,并执行以下操作:

define(function () {
    window.session = { someVariable: 'value1', someVariable2: 'value2' };
})
然后在其他模块内,您可以访问会话对象,如下所示:

define(function() {
    return {
        getValue1: function () {
            return session.someVariable;
        },
        obs1: ko.observable(session.someVariable2)
    }
})
此信息不会在页面刷新之间保留。。它只存在于记忆中。 如果您希望持久化会话数据,我不会考虑持久化客户端上的任何信息,除非您计划将应用程序设置为离线应用程序。 离线应用程序是一种即使不接入互联网也能正常工作的应用程序。但是,如果你的应用程序要求用户始终连接到互联网,那么我只会将会话数据存储在服务器上。因此,只需使用web服务来持久化会话数据并检索它


您可以使用cookie将服务器上的会话绑定到客户端。

作为Evan答案的替代方案,这绝对是正确的AMD方法。。。您是否考虑过为此使用全局对象

在main.js中

window.myApp = {
    prop1: 'value',
    subOne: {
         prop1: 'value'
    } 
   ... 
}

这将允许您随时随地访问全局
myApp
对象。我知道有些人会认为这是全局命名空间的污染,一般来说是一个糟糕的实践,但是在SPA项目中(在这里你控制代码>窗口< /代码>),我认为这仍然是一个可行的方法。

一个要记住的方法是,在用户点击页面上的刷新按钮的情况下,会话数据不会持久。与会话数据一样。我在我的Durandal应用程序中使用了相同的方法,如果您依赖会话模块中的某些数据,这可能会有点问题。Thansk,我做的第一件事就是这样,但除了数据没有持久化之外,我关心的另一件事是在每个视图模型上都需要它,有没有一种方法可以在shell.js或类似的东西上全局地要求它?使用localeStorage为以后保存数据(其他viewmodels)是否有任何缺点?如果你想让你的应用程序离线工作,那么localeStorage是一种很好的方法。
define(function() {
    return {
        getValue1: function () {
            return session.someVariable;
        },
        obs1: ko.observable(session.someVariable2)
    }
})
window.myApp = {
    prop1: 'value',
    subOne: {
         prop1: 'value'
    } 
   ... 
}