2012-01-03 3 views
1

コントローラ内の新しいオブジェクトにデータをバインドするときに、DBの関連する子オブジェクトがidフィールドに基づいてプルされるように、javascriptオブジェクトを設定しようとしています。これは、次のようなバインディング春データに記載されています:Grailsコントローラの子オブジェクトデータバインド

データは

を結合し、協会あなたは1対1または多対1の関連を持っている場合は、 Grailsのデータバインディング機能を使用することができますこれらの関係も更新してください。次のような着信要求がある場合 たとえば:

/book/save?author.id=20

をGrailsは自動的にリクエスト パラメータに.ID接尾辞を検出し、ルックアップ著者のインスタンスをします与えられたIDのバインディング データを行うときなど:

がDEF =新しいブック(のparamsを)は、B

私は子供の小道具と完全に構成オブジェクトとしてコントローラへのjavascriptオブジェクトを投稿したいですerties。コントローラがオブジェクトの子プロパティを次のURL(ドキュメントと同じ)/book/save?author.id=20のように表示するように、javascriptオブジェクトを設定するにはどうすればよいですか?

私はこれを試してみましたが、動作していないよう:

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

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

のViewModelはコントローラに掲載され、自動的に関連するレコードをフェッチしているときにコントローラが「child.id」を参照しません。私はそれがこのように動作すると思ってベースを完全にオフにしていますか?

おそらく別の方法として、文字列表現が "object.property"になるようにJavaScriptオブジェクトをシリアル化できますか?

+0

ドメインオブジェクトをコードに追加できますか? また、Grailsに渡しているデータを確認できるように、コントローラで打ち込んでいるクロージャの冒頭にprintln(params)を追加できますか?それはかなりあなたに答えを与えるのに役立つでしょう –

答えて

0

{child:{id:1}}のようにjavascriptオブジェクトを作成すると、達成しようとしていることが達成されるはずです。このようなものを試して、必要なjsオブジェクトを作成してください。

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

grailsコントローラは、この構造をchildObj [id]と見て、意図したchildObj.idではないと見ています。これは私の例と同じ結果です。 – BoxerBucks

関連する問題