gpt4 book ai didi

javascript - canJS:加载关联模型,但只保存 "base"模型

转载 作者:行者123 更新时间:2023-11-30 10:35:20 25 4
gpt4 key购买 nike

Here is a demo ,如何在 canJS 中加载具有关联的模型(在单个请求中)。我在 github repo of canJS 中找到了它, here ,实际上我不得不稍微重写它才能工作(它已经过时了),但它现在可以工作了。

我的问题是,如果我更改加载的联系人 (contact.attr('name', 'Tom');),然后我想保存它 (contact. save();),然后联系人以及联系人的任务将通过ajax 发布到服务器,以进行保存。这是合乎逻辑的,因为 taskscontact 的属性。

我的问题是,我只想在更新记录时发布联系人 namebirthdayid。我可能应该覆盖 makeRequest 方法,并在发布到服务器之前删除 tasks,但我认为应该有一个更优雅的解决方案。

希望这里有一些已经处理过这种情况的 canJS 用户。

最佳答案

我自己正在寻找解决这个问题的方法,我想出了自己的解决方案,灵感来自 trickey 在 JavascriptMVC 论坛上的建议 this post关于修改 serialize() 模型方法以使其更好地与 Rails 配合使用。

按照他的建议,我创建了我自己的 Model 类扩展,并在我的模型上添加了一个 include 字段,您可以在其中列出您想要包含的属性(在 Rails 之后设计) as_json 方法)。

can.Model("BaseModel", {}, {
serialize: function() {
var data, retval, serialized;
data = {};
retval = {};
serialized = can.Model.prototype.serialize.call(this);
//check if we're using the "include" fields or not
if (typeof this.constructor.include !== 'undefined') {
can.each(this.constructor.include, function(attr) {
data[attr] = serialized[attr];
});
} else {
data = serialized;
}
//wrap the return value in the model name for Rails purposes, e.g. {"event": {data}}
retval[this.constructor._shortName] = data;
return retval;
}
});

然后在我的模型中,我使用“include”数组来指示我想要包括哪些字段。通过省略“与会者”和“发言人”,那些关联的模型将不会打包到我发送回服务器的序列化 JSON 中。

Event = BaseModel.extend('Event', {
findAll: "GET /admin/events",
findOne: "GET /admin/events/{id}",
create: "POST /admin/events",
update: "PUT /admin/events/{id}",
destroy: "DELETE /admin/events/{id}",
attributes: {
attendees: 'Models.User.models',
speakers: 'Models.User.models'
},
include: ['id', 'name', 'start_time', 'end_time']
}, {});

关于javascript - canJS:加载关联模型,但只保存 "base"模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14316913/

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