2

コントローラによってロードされたデータをバインドしてビューで使用できるようにする方法を理解するのに問題があると思います。この質問の目的のために、私はjsFiddleでember-restを使用してデータをロードする小さな例を作成しました。

jsFiddleでわかるように、この例で実現したいのは、テンプレートを使用してレンダリングされたmytestDataをバインドすることです。Emberでこれを行う適切な方法は何ですか?BlockViewblocki

フィドルが適切に実行されているときにどのように見えるかを知るには、へのバインディングを置き換えて、blocksControllerに直接バインドしtestDataます。私はこれを別のバージョンのjsFiddleで実行しました。

{{view App.BlockView blockiBinding="App.testData" }}

もちろん、このバージョンではブロックが適切にレンダリングされますが、それは私がこれを実行したい方法ではありません。blockController(Emberが推奨するように)ビューに適切に接続し、そこからデータを取得する方法を学びたいです。実際のシナリオでは、データはREST APIから取得されるため、この例ではember-restを使用しています。

忍者の動きでそのjsFiddleを修正する場合は、数秒かかり、その仕組みの背後にある概念を説明してください。これに関する最新の情報を入手するのは非常に難しいと思いました。ありがとう!

4

2 に答える 2

4

a) 適切な命名スキーム b) アウトレットの接続を使用して、ビューをコントローラーに接続します。

たとえば、ビュー BlockView がある場合は、コントローラー BlockController が必要です。次に、ビューからコントローラーのコンテンツに直接アクセスできます。

App.BlockView = Ember.View.extend({
  templateName: 'block'
});

App.BlockController = Ember.ObjectController.extend({
  block: { name: 'block 1', children: [ {name: 'child1' }, {name: 'child2'}] }
});

<script type="text/x-handlebars" data-template-name="block" >
   <div>Block Name: {{block.name}}</div>
   {{#each child in block.children}}
     <div>Child Name: {{child.name}}</div>
   {{/each}}
</script>

コード例で見逃しているのは、ルーターです。これは、すべてのコンポーネントの適切な「接着」を処理します。Trek のチュートリアルでルーターを見てみましょう (これは最新のものであり、アプリケーションの作成方法を表しています)。

ルーターでは、アウトレットにレンダリングする必要があるビューをロードする connectOutlets メソッドを定義します。上記の命名スキームに固執すると、ビューからコントローラーに直接アクセスできます

アップデート

いくつかの変更を加えてコードを実行しました:

  • 自分でコントローラーを開始する必要はありません。App.initialize() がそれを処理します
  • リソース コントローラーをオブジェクト コントローラーに変更し、リソース ブロックを削除しましたが、もちろん、これは ObjectController と変わりません。基本的な理解のために、プレーンな ember.js オブジェクトを使用すると、作業が楽になります。
  • それはCoffee ScriptではなくJavaScriptにあります-申し訳ありません:D

残念ながら、私は jsFiddle を作成できません (理由は聞かないでください - 手がかりはありません :))。だから私はGISTにデータを追加しました - https://gist.github.com/3832764

更新 2

また、JSFiddle http://jsfiddle.net/qV5wu/2/を作成することもできました:)

于 2012-10-03T09:54:51.050 に答える
0

http://trek.github.com/を読んで、それが役立つかどうかを確認してください。フィドルについて私が見ていることから、あなたが持っている例はチュートリアルで提供されているものと非常に似ています。

特に注目したいのは connectOutlet です。

それが役立つことを願っています。

于 2012-10-03T06:05:46.517 に答える