YiiとNode.jsのファンであるすべてのKhabrovitesにこんにちは。 Jiiに関する一連の記事を続けていますが、今度はブラウザでJiiを使用できることについて説明します。
アプリケーション 、
コンポーネント 、
コントローラー 、
モジュール 、モデル、ビューなどのすべてのフレームワーク構造がブラウザーで使用できるようになったと想像してください!
このフレームワークについて初めて耳にする人には、
以前の記事を読むか
、サイトにアクセスすることをお勧め
します 。 要するに、
Jiiは、アーキテクチャとAPIがYii 2.0 PHPフレームワークに基づいているフレームワークであり、それを最大限に活用し、JavaScriptの利点を保持しています。
クライアント上のJii(ブラウザー内)
Jiiはもともと、JavaScriptコードを実行できる場所であればどこでも使用できるように作成されています。 モジュールコードがサーバーインフラストラクチャに関連付けられていない場合は、ブラウザーで使用できます。
これはすべて壊れており、npmモジュールの一部で接続されています:
クライアントでアプリケーションを作成する
アプリケーションは、サーバーとほぼ同じように作成されます。
// Libs require('jii/deps'); // included underscore and underscore.string libraries require('jii-urlmanager'); require('jii-clientrouter'); // Application require('./controllers/SiteController'); Jii.createWebApplication({ application: { basePath: location.href, components: { urlManager: { className: 'Jii.urlManager.UrlManager', rules: { '': 'site/index' } }, router: { className: 'Jii.clientRouter.Router' } } } }).start(); console.log('Index page url: ' + Jii.app.urlManager.createUrl('site/index'));
依存関係
Jiiは
Underscoreおよび
Underscore.stringライブラリに依存しています。 それらが既にページに接続されている場合、依存関係が必要な場合は
require( 'jii / deps')としてJiiを
require( ' jii
')として接続する必要があります。
JavaScriptのコンパイル
Jiiでは、依存関係の読み込みにCommonJSアプローチを使用することをお勧めします。 モジュールのアセンブリは、たとえば
Browserifyを使用するなど、あらゆる手段で実行できます。 最も単純なアセンブリの例を考えてみましょう。
依存関係のインストール:
npm install
Gulpfile.jsファイル:
require('gulp-easy')(require('gulp')) .js('sources/index.js', 'bundle.js')
クライアントルーティング
ブラウザのアドレスバーの状態を監視および処理する必要がある場合、
jii-clientrouterモジュールはこの目的のために特別に設計された戦いに入ります。
Jii-clientrouterは、
アプリケーションコンポーネントとしてインストールされ、
popstateイベント(またはHTML5 History APIをサポートしないブラウザーの
ハッシュ 変更)にサブスクライブします。
ページが読み込まれるか、アドレスバーが変更されると、
Jii.urlManager.UrlManagerコンポーネントを使用してアドレスバーを解析し、リクエストパラメーターを含むルートを受け取り、見つかったルートに相当するアクションを起動するハンドラーが起動します。 したがって、Jii-clientrouterが機能するには、jii-urlmanagerも接続する必要があります。
アプリケーション構成の例:
require('jii/deps'); require('jii-urlmanager'); require('jii-clientrouter'); // Application window.app = Jii.namespace('app'); require('./controllers/SiteController'); Jii.createWebApplication({ application: { basePath: location.href, components: { urlManager: { className: 'Jii.urlManager.UrlManager', rules: { '': 'site/index', 'article/<id>': 'site/article', } }, router: { className: 'Jii.clientRouter.Router' }, // ... } } }).start();
アクションでは、
リクエスト(Jii.clientRouter.Request)および
レスポンス(Jii.clientRouter.Response)コンポーネントが利用可能になります。これは、HTTPサーバーを備えたサーバーで作業しているときと同じです。 これらのコンポーネントを使用すると、アドレスバーからパラメーターを取得できます。 そのようなアクションの小さな例を考えてみましょう。
アドレス
localhostを含むアドレスバーがあるとします
:3000 / article / new-features 、指定されたアドレスに移動すると、クライアントは
Jii.clientRouter.Router._onRoute()ハンドラーを起動し、
サイト/記事ルーターを見つけてアクション(メソッド)
app.controllers.SiteControllerコントローラーのactionArticle() :
Jii.defineClass('app.controllers.SiteController', { __extends: Jii.base.Controller,
デモ
ブラウザでJiiを使用する例は、Githubのプリミティブチャットのソースコード
jiisoft / jii-boilerplate-chatで表示できます。
これらのプラクティスはまだ形成されていないため、Jiiを使用するための「ベストプラクティス」としてこの例を取り上げるべきではありません。 クライアントでのコードの設計と構造に関する推奨事項を聞いてうれしいです。
結論として
Jiiはオープンソースプロジェクトであることを思い出させてください。だから誰かがその開発に参加してくれたらとても嬉しいです。 affka@affka.ruに書き込みます。
フレームワークサイト
-jiiframework.ruGitHub-
https://github.com/jiisoft機能の議論は
githubで行われます
フレームワークのアイデアが好きですか? githubに 星をつけてください!