gpt4 book ai didi

javascript - backbone.js:覆盖到 JSON

转载 作者:行者123 更新时间:2023-11-29 10:21:03 27 4
gpt4 key购买 nike

我正在尝试在 Backbone.Model 中实现某种嵌套集合

为此,我必须覆盖解析服务器响应并将数组包装到集合中的适配器函数,以及在没有任何辅助方法的情况下序列化整个对象的函数。我在使用第二个时遇到了问题。

var Model = Backbone.Model.extend({

urlRoot: "/model",

idAttribute: "_id",

// this wraps the arrays in the server response into a backbone collection
parse: function(resp, xhr) {
$.each(resp, function(key, value) {
if (_.isArray(value)) {
resp[key] = new Backbone.Collection(value);
}
});
return resp;
},

// serializes the data without any helper methods
toJSON: function() {
// clone all attributes
var attributes = _.clone(this.attributes);

// go through each attribute
$.each(attributes, function(key, value) {
// check if we have some nested object with a toJSON method
if (_.has(value, 'toJSON')) {
// execute toJSON and overwrite the value in attributes
attributes[key] = value.toJSON();
}
});

return attributes;
}

});

现在问题出在 toJSON 的第二部分。出于某种原因

_.has(value, 'toJSON') !== true

不返回真

谁能告诉我哪里出了问题?

最佳答案

Underscore's has这样做:

has _.has(object, key)

Does the object contain the given key? Identical to object.hasOwnProperty(key), but uses a safe reference to the hasOwnProperty function, in case it's been overridden accidentally.

但是您的 value 不会有 toJSON 属性,因为 toJSON 来自原型(prototype)(参见 http://jsfiddle.net/ambiguous/x6577/ )。

您应该改用 _(value.toJSON).isFunction():

if(_(value.toJSON).isFunction()) {
// execute toJSON and overwrite the value in attributes
attributes[key] = value.toJSON();
}

关于javascript - backbone.js:覆盖到 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11958747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com