2012-09-26 1 views
8

emberjsフォームtrek.github.comを学習しています。このチュートリアルではEm.ObjectControllerEm.ArrayControllerの両方を使用しました。また、Em.Controllerもあります。ObjectControllerとArrayController

私はそれらを使用するときは混乱していると思います。Em.ObjectControllerは単一オブジェクト用です。Em.ArrayControllerは配列用で、Em.ControllerはApplicationController用です。

どのような場合にどのような祝福ルールを使用するのですか?

答えて

13

通常、コントローラがアイテムリストを表す場合はEmber.ArrayControllerを使用し、コントローラが単一アイテムを表す場合はEmber.ObjectControllerを使用します。以下のような何か:

MyApp.ContactsController = Ember.ArrayController.extend({ 
    content: [], 
    selectedContact: null 
}); 

MyApp.SelectedContactController = Ember.ObjectController.extend({ 
    contentBinding: 'contactsController.selectedContact', 
    contactsController: null 
}); 

次に、あなたのEmber.Router(あなたがそれらを使用している場合)には、あなたがconnectOutlets関数内2を接続します:

connectOutlets: function(router) { 
    router.get('selectedContactController').connectControllers('contacts'); 
} 

は編集:私は使用したことがありませんEmber.Controller。ソースコードを見ると、他の2つのコントローラーには適合しないカスタムコントローラーを構築する場合に、これを使用することができます。

+4

私の理解では、あなたの 'App.ApplicationController'のように、コントローラがプロキシでないとき(オブジェクト用でも配列用でもない)、' Ember.Controller'を使用することです。 – dechov

+0

Joachim pauldechovあなたの正確な返信をありがとう!今私はそれらの違いを知っています。 – xnjiang

0

一般的なルールは、ルートからモデルに依存することです。

モデルが配列の場合は、ArrayControllerを使用する必要があります。これにより、将来的にソートやフィルタリングを簡単に実装できます。 ArrayControllerは通常ObjectControllersを接続しています。

モデルがEmberオブジェクトのインスタンスである場合、ObjectControllerを使用する必要があります。これは、たとえばemberデータを使用している場合に発生します。 Objectcontrollerを使用すると、モデルプロパティに直接アクセスできます。毎回model.propertyと書く必要はありません。

App.ApplicationRoute = Ember.Route.extend({ 
    model: function() { 
     return Ember.Object.create({name: 'Mathew'}); 
    } 
}); 

My name is {{name}} 

1がモデルを持っていないときに最後に、ちょうどEmber.Controllerを使用するための理想的な状況があります。 ObjectControllerとしてモデルプロパティに直接アクセスすることはできません。

関連する問題