2016-05-06 16 views
1

この問題は事前に申し訳ありませんが、もう何をすべきかわかりません。私は最近、AngularJSとGrails 3を使い始めました。私は全体的にデータフローをやや混乱させています。私はこれから明白な説明を求めていますが、私の問題にぴったりの良い情報源はありませんでした。Grails 3と角度 - 入力パラメータをバックエンドコントローラに渡す方法

我々はいくつかのデータモデルを持って、彼らにはFooという名前を付け、他のオブジェクトとの関係を持っており、それらにバー名前:

class Foo implements Serializable{ 
    Date dateCreated 
    Date lastUpdated 

    String name 
    Bar bar 
    C c 
    ... 
} 

class Bar implements Serializable { 

    String name 
    String usid 

    C c 
    D d 
    E e 
} 

を今私は中1つの入力対話を持ちたいですこれは、データベース内の1つのhttp要求ですべてのオブジェクトをカスケードするのを防ぐために、オブジェクトFooに必要なデータを書き込むことができます。

私の問題は、私がangularJSを初めて使用して以来、私はどのようにリレーショナルオブジェクトを作成し、それらをデータオブジェクトFooで使うのか分かりません。私はオブジェクトを構築するために必要な情報を持っていますBar JSONでバックエンドで保存メソッドが呼び出されました。Fooであり、BarはFooでnullです。

これまで私はFoo用のフロントエンドコントローラを持っていて、要求後にFoo.controllerはFoo.serviceにaction: 'save'を注入してバックエンドにメソッドsaveを呼び出すようにしました。

フロントエンドコントローラ:

function FooCreateController(fooService, $routeParams, $location) { 
    var vm = this; 
    vm.save = function (foo) { 
     fooService.save({action: 'save'}, foo, function (res) { 
      if (res.id) { 
       $location.path("/foo/" + res.id); 
      } 
      else { 
       alert("Unknown error occurred"); 
      } 
     }) 
    } 
} 

fooDataFactoryService:

angular 
    .module("fooPackage.foo") 
    .factory("fooDataFactoryService", fooDataFactoryService); 

function fooDataFactoryService(DomainServiceFactory) { 
    return DomainServiceFactory('/foo/:action/:fooId', {fooId: '@id', action: '@action'}, 
     {"show" : {method: "GET"}}, 
     {"save" : {method: "POST"}}, 
     {"delete" : {method: "DELETE"}}, 
     {"update" : {method: "PUT"}} 
    ); 
} 

Groovyのバックエンド・コントローラー:どのように

def save(Foo foo) { 
    if (foo == null) { 
     transactionStatus.setRollbackOnly() 
     render status: NOT_FOUND 
     return 
    } 

    if (foo.hasErrors()) { 
     transactionStatus.setRollbackOnly() 
     respond foo.errors, view:'create' 
     return 
    } 

    foo.save flush:true 

    respond foo, [status: CREATED, view:"show"] 
} 

ここ

は、重要なコード部分であり、私はこれを達成することはできますか?私は、データ型Fooでバックエンド保存メソッドを呼び出すのではなく、要求からの入力パラメータを呼び出すことを望んでいます。それとももっと良いアプローチがありますか?

私はまだAngularのことを十分に理解していませんが、今週末にはこれは非常に重要であり、何か助けが必要です。事前に:-(

ビッグありがとう!

+0

わかりましたので、私の考えは今、この対話のためのオブジェクトはFooを使用しないことですが、代わりに文字列としてすべての入力パラメータを受け取り、それらを渡し、ダイアログオブジェクトのようなものを使用バックエンドコントローラ。コントローラは、取得したパラメータに基づいて新しいオブジェクトをインスタンス化します。これはうまくいくはずですが、私のためにうまく設計されていないようです...もう一つのアイデアが高く評価されています! – Vegaaaa

+0

私はそれを取り戻すが、私はこの解決策についてより多く考えると、それは私にとってはより良いと思える。この入力要求を処理する独自の数式オブジェクトを使用することによって、より高い分離度と高いモジュラリティも得られます... – Vegaaaa

答えて

0

私は最終的に、このための解決策を考え出すした後、私の答えを編集するのを忘れた。

私の混乱の理由は作品をGrailsの方法については、私が持っていた行方不明の知識でした。私の背景には、私はちょうどその本体でPOSTリクエストのリクエストパラメータをカプセル化する要求オブジェクトを使用するために使用された。同様に大きい用語と一部のJavaの経験でNodeJSある。NodeJSで

私はパラメータ経由でリクエストパラメータを受け取ります関数呼び出し(関数(req、res、next)、httpデータをカプセル化したres)で返します。

grailsの問題は、バックエンドコントローラのどこにも決して定義されていないのに、このデータが既にアクセス可能であったことです。リクエストとparamsオブジェクト!

params.putAll(request.JSON as Map) 

とにつながる私の保存方法の入力パラメータ、削除:

def save() { 
    params.putAll(request.JSON as Map) 

    log.println(params) 
} 

http://docs.grails.org/3.1.1/ref/Controllers/params.html

私はちょうど私のバックエンド・コントローラーに次のコードを追加する必要がgrailsで起こる魔法は、特に別の背景を持つときに、非常に混乱することがあります。

乾杯、

Vegaaaa

関連する問題