我在grails中有一个控制器,我发送一个ajax JSON帖子和knockoutJS视图模型。视图模型(以及javascript对象)如下所示:
var childProperty= function(name, id) {
this.name = name;
this.id = id;
};
//KnockoutJS - Main view model
var viewModel = {
id: ko.observable(1),
childProperty: ko.observable(new childProperty("Chuck",1))
}
控制器端的数据模型试图自动使用Spring绑定魔术并将JSON请求参数绑定到我的数据模型的新实例,如下所示:
def jUpdate = {
def update = new SomeObject(params)
}
当我希望Spring绑定检测到childProperty.id是数据模型中的一对多关系并获取数据模型中的相关属性时,问题就出现了。 Grails的文档说明了这一点:
数据绑定和关联
如果您有一对一或多对一的关联,则可以使用 Grails的'数据绑定功能也可以更新这些关系。对于 例如,如果您有传入的请求,例如:
/book/save?author.id=20
Grails将自动检测.id 请求参数后缀,并查找作者实例 执行数据绑定时给定的id,例如:
def b =新书(params)
我正在使用ko.toJS实用程序函数,并且简单属性正确绑定。如何设置视图模型子属性,以便在将其发布到grails控制器时,Spring会正确检测它并获取相关记录并构建对象?
答案 0 :(得分:0)
我从来没有能够使自动弹簧绑定工作,所以我只是传递子对象的id并在params映射中手动设置它们在服务器端。之后,GORM会适当地获取记录。像这样:
def update = {
params.put("childObject.id",params.childObjectId)
params.remove("childObjectId")
def parentObject = new ParentObject(params)
}
这将获取相关项并构建对象。如果你有很多相关的领域,这将是一个痛苦的过程。