1

Ember.js の学習の一環として、 Adamの例に基づいて、Ember でテーブル ビューを作成しようとしています。

私が直面している問題は、ビュー用に別のコントローラーを作成し、行用に itemController を含めると、ember で次のエラーが発生することです: Uncaught TypeError: Cannot call method 'lookup' of null ember-1.0.0-rc.6. js:13933

これをデバッグすると、次のコードにあることがわかります。

controllerAt: function(idx, object, controllerClass) {
var container = get(this, 'container'),
    subControllers = get(this, '_subControllers'),
    subController = subControllers[idx];

if (!subController) {
  subController = container.lookup("controller:" + controllerClass, { singleton: false      });

コンテナは として取得されnullます。

一方、ApplicationController を介して実行される場合、そのような問題はありません。

JS Fiddleビューに ApplicationController を使用し、itemController に別のコントローラーを使用する - 正常に動作する

JSビン

この項目では、コントローラーが指定されて{{#each controller itemController="tableRow"}}おり、コントローラーはApp.TableRowController

これは、別の TableViewController を使用した非常によく似たJS BinJS Fiddle{{#each controller itemController='tableRow'}です。項目コントローラーは、同様に として指定されます。
Table View の別の Controller は :{{view App.TableView controllerBinding="tableViewController"}}を使用してバインドされ、この tableViewController は ApplicationController のプロパティとして次のように指定されます。

App.ApplicationController = Ember.ArrayController.extend({
tableViewController: function() {
    var tc = Ember.get('App.TableViewController').create();
    tc.set('content',Ember.ArrayProxy.create({
                        content: Ember.A(tableData)})
            );
    return tc;
}.property()
});

しかし、何らかの理由で、ここでは itemController が機能しません。

これは、ビューに別のコントローラーを使用するJSフィドルですが、itemControllerはありません-これは正常に機能します

コントローラーに欠けているものはありますか?

助けてください。ありがとう。

4

1 に答える 1

0

Ember ではほとんどの場合、オブジェクトを直接作成するのではなく、コントローラーやモデルなどのクラスを宣言します。そして、ember は IOC コンテナーを使用してこれらのオブジェクトを作成します。のようなものは避けてくださいController.createcontrollerBinding同様に、代わりに直接使用することは避けてくださいneeds

controllerBindingそのため、パスを提供する代わりに、 App.TableView.

{{view App.TableView contentBinding=content}}

tableData のセットアップもmodel()フックに属します。tableData変数がスコープ内にあるため、サンプルでは機能します。

これが更新されたjsfiddleです。

于 2013-07-13T05:59:34.587 に答える