gpt4 book ai didi

javascript - 无法从 sails.js 填充的对象中删除数组

转载 作者:行者123 更新时间:2023-11-30 08:36:58 26 4
gpt4 key购买 nike

我无法删除或更改library对象的books属性的值。

Library.findOne(12).populate('books').populate('createdBy').exec(
function(err,library) {

delete library.createdBy;
//worked

delete library.name;
//worked

delete library.books;
//no effect

library.books = [];
//worked

library.books = [{a:'any val'}];
//just like library.books=[]

console.log(library);
});

我的图书图书馆模型和 createdBy 是这样的

createdBy: {
model: "createdBy"
},
books: {
collection: "books",
via: "library",
dominant: true
}

我不知道这里发生了什么。

最佳答案

delete library.books; 不起作用,因为关联不是模型对象中的字段。关联实际上存在于 associations 对象中,读/写操作是通过自定义 getter/setter 完成的。您可以在 waterline/model/lib/internalMethods/defineAssociations.js#L109 中查看有关此行为的更多信息:

Define.prototype.buildHasManyProperty = function(collection) {
var self = this;

// Attach to a non-enumerable property
this.proto.associations[collection] = new Association();

// Attach getter and setter to the model
Object.defineProperty(this.proto, collection, {
set: function(val) { self.proto.associations[collection]._setValue(val); },
get: function() { return self.proto.associations[collection]._getValue(); },
enumerable: true,
configurable: true
});
};

希望对您有所帮助。

这会导致问题吗?这可以通过首先不填充关联来避免。执行 model.toObject()model.toJSON() 并在之后删除关联字段也应该有效。

关于javascript - 无法从 sails.js 填充的对象中删除数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30479765/

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