设置knockoutJS视图模型绑定到一对多属性

时间:2011-12-15 05:11:39

标签: spring grails knockout.js

我在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会正确检测它并获取相关记录并构建对象?

1 个答案:

答案 0 :(得分:0)

我从来没有能够使自动弹簧绑定工作,所以我只是传递子对象的id并在params映射中手动设置它们在服务器端。之后,GORM会适当地获取记录。像这样:

def update = {
 params.put("childObject.id",params.childObjectId)
 params.remove("childObjectId")

 def parentObject = new ParentObject(params)
}

这将获取相关项并构建对象。如果你有很多相关的领域,这将是一个痛苦的过程。