Backbone.js模型缓存

Backbone.js model caching

本文关键字:缓存 模型 js Backbone      更新时间:2023-09-26

注意:我是Backbone平台上的一个非常初学者!!:)

我在主干网中有这个模型:

var errors_model    =   Backbone.Model.extend(
{
        total_errors     : 0,
        error_messages   : {},
        initialize       : function ()
        {
            this.set('total_errors',        0);
            this.set('error_messages',      {});
        },
        add_error        : function (tab, field, error)
        {
            var error_messages = this.get('error_messages');
            var error_md5 = this.md5(error);
            if(!(tab in error_messages))
            {
                error_messages[tab] =   {};
            }
            if(!(field in error_messages[tab]))
            {
                error_messages[tab][field]  =   {};
            }
            if(!(error_md5 in error_messages[tab][field]))
            {
                error_messages[tab][field][error_md5]   =   error;
            }
            this.set('error_messages', error_messages);
            this.increase_errors();
            console.log(error_messages);
        },
        remove_error     : function (tab, field, error)
        {
            var error_messages  =   this.get('error_messages');
            var error_md5       =   this.md5(error);
            if(!(tab in error_messages) && !(field in error_messages[tab]) && !(error_md5 in error_messages[tab][field]))
            {
                return;
            }
            delete error_messages[tab][field][error_md5];
            this.set('error_messages',  error_messages);
            this.decrease_errors();
            console.log(error_messages);
        },
        increase_errors  : function()
        {
            var total_errors    =   this.get('total_errors');
            if('undefined' === typeof(total_errors))
            {
                total_errors    =   0;
            }
            ++total_errors;
            this.set('total_errors',    total_errors);
        },
        decrease_errors  : function()
        {
            var total_errors    =   this.get('total_errors');
            if('undefined' === typeof(total_errors))
            {
                total_errors    =   0;
            }
            if(0 === total_errors)
            {
                return;
            }
            --total_errors;
            this.set('total_errors',    total_errors);
        }
    }
);
com                        =   window.com  ||  {};
com.wp                     =   com.wp      ||  {};
com.wp.srb                 =   com.wp.srb  ||  {};
com.wp.srb.errors_model    =   new errors_model();

然后我使用这个代码:

com.wp.srb.errors_model.add_error('#ad',       '#image_upload',    'This is an error');
com.wp.srb.errors_model.add_error('#ad',       '#image_upload',    'Another error');
com.wp.srb.errors_model.add_error('#ad',       '#image_upload',    'Yet another error');
com.wp.srb.errors_model.add_error('#ad',       '#image_url',       'URL error');
setTimeout(
    function()
    {
        com.wp.srb.errors_model.remove_error('#ad',    '#image_upload',    'Another error');
    },
    3500
);

但我得到的结果是这两个动作(com.wp.srb.errors_model.add_errorcom.wp.srb.errors_model.remove_error):

Object {#ad: Object}
    #ad: Object
        #image_upload: Object
            13b7afb8b11644e17569bd2efb571b10: "This is an error"
            69553926a7783c27f7c18eff55cbd429: "Yet another error"
        #image_url: Object
            2b4a9847e26368312704b8849de9247a: "URL error"
            __proto__: Object
        __proto__: Object
    __proto__: Object
Object {#ad: Object}
    #ad: Object
        #image_upload: Object
            13b7afb8b11644e17569bd2efb571b10: "This is an error"
            69553926a7783c27f7c18eff55cbd429: "Yet another error"
        #image_url: Object
            2b4a9847e26368312704b8849de9247a: "URL error"
            __proto__: Object
        __proto__: Object
    __proto__: Object
Object {#ad: Object}
    #ad: Object
        #image_upload: Object
            13b7afb8b11644e17569bd2efb571b10: "This is an error"
            69553926a7783c27f7c18eff55cbd429: "Yet another error"
        #image_url: Object
            2b4a9847e26368312704b8849de9247a: "URL error"
            __proto__: Object
        __proto__: Object
    __proto__: Object
Object {#ad: Object}
    #ad: Object
        #image_upload: Object
            13b7afb8b11644e17569bd2efb571b10: "This is an error"
            69553926a7783c27f7c18eff55cbd429: "Yet another error"
        #image_url: Object
            2b4a9847e26368312704b8849de9247a: "URL error"
            __proto__: Object
        __proto__: Object
    __proto__: Object
Object {#ad: Object}
    #ad: Object
        #image_upload: Object
            13b7afb8b11644e17569bd2efb571b10: "This is an error"
            69553926a7783c27f7c18eff55cbd429: "Yet another error"
        #image_url: Object
            2b4a9847e26368312704b8849de9247a: "URL error"
            __proto__: Object
        __proto__: Object
    __proto__: Object

所以问题是,主干模型是否以某种方式缓存了对象属性?我做错什么了吗?

注意:这是将在WordPress Dashboard中使用的插件的一部分,我不知道WordPress是否已经使用任何插件来缓存模型数据。

Console保存对对象的引用,因此当您在代码执行后检查它们时,对象的状态将是现在的状态,而不是调用时的状态:

console.log(error_messages);

这可能适用于字符串或数字,但不适用于对象。值得庆幸的是,您可以使用将对象转换为字符串

JSON.stringify(error_messages);

它将在执行时为您提供对象的快照。