2

appendTo メソッドと{{render}}ヘルパーを使用して、ネストされたビューのシナリオで単純なイベント処理メカニズムを試していますが、読み込み中に「null のメソッド ルックアップを呼び出せません」というエラーがスローされます

JSFiddle for the same -シンプルなネストされたビュー イベント処理

もう1つの観察は{{render 'parent'}}、アプリケーションテンプレートに書き込んでJavaスクリプトから親の作成を削除すると、すべて正常に機能することです。何かアイデアはありますか??

4

1 に答える 1

4

直し方:

ビューやテンプレートに問題はないようです。これらは、appendTo を介して手動でビューを作成する代わりに、Ember ルーターを使用してビューを管理する場合に機能します。したがって、代わりに:

var view = App.ParentView.create({ controller: App.ParentController.create() });
view.appendTo('#dvViewRender'); 

ルーターを使用します。

App.Router.map(function() {
  this.route("parent", { path: "/" });
});

アプリケーション テンプレートを定義します。

<script type="text/x-handlebars">{{outlet}}</script>

証明する!

ここで作業フィドル: http://jsfiddle.net/mgrassotti/vQpe6/1/

なぜそれが機能するのですか?

ヘルパーは、renderEmber.Router 管理ビューのコンテキスト内で使用するように設計されています。emberを呼び出す{{render "child"}}と、子テンプレートに適したコントローラー クラスを見つけようとします。

appendTo メソッドを本当に使いたい場合はどうすればよいですか?

renderわかりましたが、ヘルパーを使用できません。その他のオプション:

  • {{partial 'child'}}子テンプレートを挿入しますが、ChildView または ChildController には接続しません

  • ビュー ヘルパーを使用すると、App.ChildView が挿入され、ParentController のコンテキストでテンプレートがレンダリングされます。

  • アウトレットを使用し、App.ChildController のインスタンスを使用して App.ChildView に手動で接続します

*更新(コメントに基づく)*

この動的で独立した性質のため、ページ レイアウト全体とウィジェットを 1 つのアプリケーション テンプレートに埋め込むことはできません。この種のシナリオで Ember を使用するための提案はありますか??

各ウィジェットは個別の ember アプリケーションにすることができます。それぞれには、その状態を管理するためのhistory: noneルーターがありますが、そのルーターを設定することにより、ブラウザーの URL に接続されなくなります。例えば:

var Widget2App = Ember.Application.create({
  rootElement: '#widget2',
  history: 'none',
  ApplicationView: Ember.View.extend({
    templateName: 'widget2',
  }),
  ParentView: Ember.View.extend({
    templateName: 'parent2',

1 ページに 2 つの ember アプリケーションを示す更新された例: http://jsfiddle.net/mgrassotti/L6aVB/

于 2013-01-22T05:15:50.993 に答える