我正在尋找解決這一非常問題我自己,我想到了我自己一個人,通過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;
}
});
然後在我的模型中,我使用「包含」數組來指示我想包含哪些字段。通過省略「參加者」和「發言者」,這些關聯的模型將不會被打包到我的序列化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']
}, {});
嘿kaptron。謝謝您的回答。這可能是一個可能的解決方法,實際上它是一個優雅的! :)謝謝你分享你的想法。 –