【问题标题】:Update JS object based on local storeage基于本地存储更新 JS 对象
【发布时间】:2014-06-06 16:13:40
【问题描述】:

我正在尝试创建一个包含所有应用程序 URL 的设置对象,但其中一些 URL 值是动态的并存储在本地存储中。我的问题是如何根据最新的本地存储更新设置对象?

HTML:

<a href="javascript:slideonlyone('addon1')">Addon 1</a>
<a href="javascript:slideonlyone('addon2')">Addon 2</a>
<a href="javascript:slideonlyone('addon3')">Addon 3</a>

Javascript:

window.localStorage.setItem('TmpAdd','default');

var AppUrl = {
    'jsonUrl1' : 'http://myurl.com/' + window.localStorage.getItem('TmpAdd'),
    'jsonUrl2' : 'http://myurl.com/category/' + window.localStorage.getItem('TmpAdd')
};

function slideonlyone(item) {
    window.localStorage.setItem('TmpAdd', item );
    console.log(window.localStorage.getItem('TmpAdd'),AppUrl.jsonUrl1);      
}

在此处查看工作示例:

http://codepen.io/anon/pen/BebvE/

【问题讨论】:

    标签: javascript object local-storage


    【解决方案1】:

    每当您更改本地存储值时更新 URL:

    var AppUrl = { };
    updateURLs('default');
    
    function updateURLs(tmpAdd) {
        window.localStorage.setItem('TmpAdd', tmpAdd);
        AppUrl.jsonUrl1 = 'http://myurl.com/' + tmpAdd;
        AppUrl.jsonUrl1 = 'http://myurl.com/category/' + tmpAdd;
    }
    
    function slideonlyone(item) {
        updateURLs(item);
        console.log(window.localStorage.getItem('TmpAdd'));
        console.log(AppUrl.jsonUrl1);
    }
    

    另一种方法是将jsonUrl1jsonUrl2 转换为查看localStorage.TmpAdd 的当前值并适当创建URL 的函数。您可以使用custom property gettersMDN 使函数看起来像普通属性,但这可能有点过头了。

    var AppUrl = {
    
        'jsonUrl1' : function() {
            return 'http://myurl.com/' +
                window.localStorage.getItem('TmpAdd');
        },
    
        'jsonUrl2' : function() {
            return 'http://myurl.com/category/' +
                window.localStorage.getItem('TmpAdd');
        }
    };
    
    // usage: replace AppUrl.jsonUrl1 with AppUrl.jsonUrl1()
    

    【讨论】:

    • 所以唯一的办法就是创建一个函数,如果我需要刷新对象,就一直调用它……有点乱
    • 如果我这样做,我可以使用函数作为对象属性 AppUrl.jsonUrl1 = dybamicObject();
    • 恰恰相反。将更新本地存储和 URL 的逻辑封装在一个函数中是干净的,并从您的主代码中删除了凌乱的 window.localStorage.setItem('TmpAdd', item );。但是您不必这样做 - 请参阅我的答案的后半部分。
    • 谢谢汤姆第二个非常好我可能会对其进行一些调整;-)
    猜你喜欢
    • 2021-07-13
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2012-07-13
    • 2012-08-23
    • 2018-11-15
    • 1970-01-01
    相关资源
    最近更新 更多