4

Grails は非常に強力で、1 つのステートメント ( ) で Domain オブジェクトを JSON に変換できますobject as JSON。残念ながら、いくつかの理由により、これは Ember.js とやり取りするには十分ではありません。

Grails を Ember.js とうまく連携させるにはどうすればよいですか?

4

2 に答える 2

12

いい質問だ、自分!

Ember.js とその auto-AJAX-in-browser-data-store 忍術は、URL が特定の方法で表示され、JSON が特定の方法で表示されることを期待しています。各ツールの動作方法により、方程式の両側に適合する変更を加える方が簡単です!

Grails が提供するもの

MyCoolDomainClassコントローラを持つDomain クラスの場合MyCoolDomainClassController、Grails は URL を提供したいと考えています/app/myCoolDomainClass。次の行に沿って何かを含むようにコントローラーを設定した場合:

def index() { render MyCoolDomainClass.list() as JSON }

次のような応答が返されます。

[{ id: 1, name: "Bob"}, {id: 2, name: "Sally"}]

エンバーが望むもの

Ember.js では、同じプロパティを持つモデルを作成できます。を活用ember-dataすることで、ブラウザのデータ ストアをバックエンドに簡単に接続できます。残念ながら、Ember.js が求めるものは異なります。URL/my_cool_domain_classがデータを提供することを期待しています。

{ mycooldomainclass: [ { id: 1, name: "Bob"}, {id: 2, name "Sally"}] }

調整中

更新: ember-data-grailsGithubにレポを作成しました。このレポは、これらすべての変更を処理し、うまく機能するコントローラーを作成する方法を示しています。

于 2013-03-09T05:32:29.600 に答える
0

私は emberjs から始めて、Grails 1.3.7 で 2 年間働いています。

{ mycooldomainclass: [ { id: 1, name: "Bob"}, {id: 2, name "Sally"}] }

それはとても簡単です:

def c = Product.createCriteria()
def products = c.list{
    //your criteria
}
res = products.collect {a ->
  return [id:a.id, name:a.name, price:a.price, categoryname: a.category.name]
}

response.setHeader( "Pragma", "no-cache" )
response.setHeader( "Cache-Control", "no-cache" )
response.setDateHeader( "Expires", 0 )
render(contentType: 'text/json') {[
    'mycooldomainclass': res
]}
于 2014-05-22T12:26:14.603 に答える