注意:我是 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_error
和 com.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
所以问题是,Backbone 模型是否以某种方式缓存对象属性?我做错了什么吗?
注意:这是将在 WordPress Dashboard 中使用的插件的一部分,我不知道 WordPress 是否已经使用任何插件来缓存模型数据。
最佳答案
控制台保存对对象的引用,因此当您在代码执行后检查它们时,对象的状态将是现在的状态,而不是调用时的状态:
console.log(error_messages);
这可能适用于字符串或数字,但不适用于对象。值得庆幸的是,您可以使用以下方法将对象转换为字符串:
JSON.stringify(error_messages);
这将为您提供执行时对象的快照。
关于javascript - Backbone.js 模型缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26254205/