【问题标题】:Child object data binding in Grails controllerGrails 控制器中的子对象数据绑定
【发布时间】:2012-01-03 19:29:11
【问题描述】:

我正在尝试设置一个 javascript 对象,以便当它数据绑定到控制器中的新对象时,会根据 id 字段提取数据库中的关联子对象。这在 Spring 数据绑定中记录如下:

数据绑定和关联

如果您有一对一或多对一关联,您可以使用 Grails 的数据绑定功能也可以更新这些关系。为了 例如,如果您有传入请求,例如:

/book/save?author.id=20

Grails 会自动检测请求中的 .id 后缀 参数并在执行时查找给定 id 的 Author 实例 数据绑定如:

def b = 新书(参数)

我想将 javascript 对象作为具有子属性的完全组合对象发布到控制器。如何设置 javascript 对象,以便控制器看到对象的子属性,如下面的 url(与记录的相同)/book/save?author.id=20?

我试过了,但它似乎不起作用:

var childObject= function(name, id) {
                this.name = name;
                this.id = id;    
            };

var viewModel = {
    id: 1,
    child: new childObject("Chuck",1)
 }

当 viewModel 发布到控制器并自动获取相关记录时,控制器看不到“child.id”。我是否完全认为它是这样工作的?

也许另一种问这个问题的方法是我如何序列化 javascript 对象,使其字符串表示为“object.property”?

【问题讨论】:

  • 您可以将您的域对象添加到您的代码中吗?另外,你能否在你在控制器中点击的闭包的开头添加一个 println(params) 以便我们可以看到你传递给 Grails 的数据?这将有助于给你一个答案

标签: javascript grails


【解决方案1】:

将 javascript 对象创建为 {child :{id:1} } 应该可以实现您想要实现的目标。尝试这样的方法来创建所需的 js 对象

     var dataObj = {};
     var childObj = {};
     childObj['id'] = 1;
     dataObj['child'] =  childObj;
     return dataObj;

【讨论】:

  • grails 控制器“看到”这个结构是 childObj[id] 而不是预期的 childObj.id。这与我在示例中得到的结果相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
相关资源
最近更新 更多