23

私はEmber.jsを調べていて、とても見栄えがしますが、気になることの1つは、すでに実行中のプロジェクトで使用を開始したかどうかです。

最終的にすべてをクライアント側に移動し、ある時点でアプリケーションをシングルページアプリケーションにする必要がありますか?

はっきりさせておきます...

これまでのところ、Emberを使用してクライアントとサーバー間で通信するための最良の方法はRESTです。見た目は素晴らしいですが、私が気に入らないのは、すべてのテンプレートを初めてロードすることです。サーバー内のすべてのロジックをクライアントに移動すると(または、これがすべて間違っているのでしょうか?)、サーバー側がロジックのないRESTAPIになるように見えます。

また、グリッドなどのJavaScript(Ajax対応)コンポーネントを備えたYiiFrameworkを使用しています。アプリケーションですでに機能しているものを書き直さなくても、emberがナビゲーションでこれらすべてと対話できるようにするにはどうすればよいですか?

ログインページ(または状態)を表示していて、ログイン後、グリッドを表示する必要があります。これはYiiで簡単で、ページ全体を読み込むことができますが、Emberを使用している場合、どうすればよいですか?通常どおりのグリッド表示?グリッドのハンドルバーテンプレートと、それを制御するJavaScriptをプリロードする必要がありますか?

4

3 に答える 3

10

いいえ、すべてをクライアント側に移動するべきではありません。特に、他の方法でバイパスされる可能性のある認証と検証を移動するべきではありません。

Emberjsに移動するのは、MVCのyii-s View部分であり、コントローラーはJSONを出力します。

次に、そのデータは、Emberルーティングやコントローラーなどを介してEmbersモデルパーツにマップされます。

Yiiのプレゼンテーションロジックを残り火に置き換えるので、CGridViewのようなYiiのUIクラスを使用しないでください。それらを混合することは可能かもしれませんが、それは良い考えではないようです。あなたはEmberであなた自身を実行しなければなりません。

http://www.yiiframework.com/wiki/409/ember-js-with-yii-rest-backend-demo-application/

于 2013-01-07T17:25:34.483 に答える
7

ここにYiiの視点を追加するだけです。グリッドビュー/リストの「魔法」の多くは、データプロバイダー内(複雑な検索、並べ替え、フィルタリング用)で、モデルの解析済みフィールドでデータをフォーマットすることで発生します。

したがって、同じ概念のサーバー側を利用して、ページ付けされた最終的なJSONを、独自のウィジェット内から出力することができます。または、すべてのデータ/構成処理後に、グリッドビューをオーバーライドして、ビューではなくjsonを出力することもできます。

HTMLではなくJSONを使用すると、グリッドのフロントエンドを複製するのは非常に簡単になりますが、実際にはそれほど多くの機能が実行されていません。

これは理想的ではないかもしれませんが、ページネーション、検索、フィルタリングのためにすべてのロジックをクライアント側に移動する必要がないことを意味します。

TL; DR;
すでに機能が構築されているYiiウィジェットをオーバーライドし、それらを使用してHTMLではなくJSONを出力します。

于 2013-01-04T15:06:46.950 に答える
2

私の経験では、サーバーサイドJSを使用して既存のコントローラーとアクションに(cliまたはhttpで)アクセスできます。node.jsと統合された既存のアプリでも同じことをしました。

これの利点は、新しい実装を完全にサポートしていないブラウザーや、そもそもjavascriptをうまく利用していない検索ボットのフォールバックとして、既存のコードを維持できることです。

とにかくモデルでアプリ全体を作成しました。つまり、データ制御などです。実際の機能はコマンドにあります。また、ブラウザがサポートされていないか、JavaScriptが無効になっている場合は、UrlManagerと実際のコントローラとアクションを使用して、アンカーとページの読み込みですべてが通常の方法にフォールバックします。これらのコントローラーは、アクションでコマンドを呼び出すだけです。もちろん、json出力をビューで使用可能なデータに変換するヘルパーを使用します。

また、ページの読み込みはデフォルトのphpで行われ、コントローラービューは既に存在するためとにかく表示されます。

于 2013-01-08T09:51:07.713 に答える