186

誰かが彼らの経験をそこにある最新のbackbone.jsバリアントのいくつかと共有できることを願っています。私はいくつかのプロジェクトでバックボーン/アンダースコア/要件についてある程度の経験があり、複雑なアプリケーション構造のより高度なソリューションに向けて次のステップに進みたいと思います。

私は次のフレームワークが利用可能であることを知っています:

そして、おそらく私はいくつかを逃した。

ここに違いについての簡単な紹介があります:

しかし、それは非常に一般的です。誰かがこれらのフレームワークを使用して実際のアプリケーションで彼らの経験を共有できるかどうか疑問に思いました。

どちらかを選択する利点は何ですか?マリオネットがチャップリンよりも優れたソリューションになるのはいつですか。たとえば、特定のアプリケーションでベテブラが優れているのはなぜですか。

確かに、明白な答えは「ニーズに最適なものを使用する」ですが、これらのフレームワークの長所/目的/利点または好ましいシナリオを知るための経験が不足しています。

ありがとう!

編集1: この投稿を見つけました: Backbone.MarionettevsBackbone-ボイラープレート

編集2: メールによるMathias schafer(Chaplin)による回答:

つまり、現在の構造はすでに本番環境で使用されているため、バージョン1.0に近いものです。1.0まで、大きな新機能を追加したり、APIの変更を壊したりする予定はありません。

マリオネットは確かにそこにある最も包括的で安定したライブラリです。これは、Backboneを使用したJSアプリ開発のいくつかの側面に対応しています。たとえば、Backbone自体が完全に無効のままにする強力なビューレイヤーがあります。もちろん、いくつかの側面があなたの要求を満たさないことに気付くでしょう、そしてあなたはマリオネットの周りに構造をセットアップする必要性を感じるかもしれません。

対照的に、Chaplinは、バックボーンアプリのかなり小さいが非常に重要な側面、つまりアプリ全体の構造とモジュールのライフサイクルに焦点を当てています。この点で、Chaplinは非常に意見が分かれており、ライブラリというよりもフレームワークに似ています(「コードがライブラリを呼び出す、フレームワークがコードを呼び出す」など)。Chaplinは、個々のアプリケーションモジュールの上に配置され、アプリ全体の状態を制御するいくつかの中央クラスを提供します。これにより、たとえばRubyonRailsのような従来の構造がアプリに提供されます。

Chaplinでは、コントローラーにマップするいくつかのルートを宣言し、ルートが一致するとChaplinがコントローラーを起動します。また、古いコントローラーの廃棄、およびコントローラーが作成することになっているメインビューの表示と非表示も処理します。これが基本的な考え方ですが、チャップリンはこれをスムーズに実行するために醜い詳細を処理します。

この構造には2つの原則があります。-モジュール化、デカップリング、サンドボックス化-パブリッシュ/サブスクライブとメディエーターを使用したモジュール間通信

もちろん、これらのパターンはソフトウェア開発の世界では新しいものではなく、Backbone.jsアプリに適用するライブラリはChaplinだけではありません。

Chaplinは、Viewレイヤーの拡張機能も提供します。たとえば、非常に洗練されたCollectionViewですが、全体として、RegionsとLayoutsを備えたMarionetteほどではありません。しかし、Chaplin Viewsが提供する手段を使用して、このようなメタクラスを作成するのは比較的簡単です。

4

5 に答える 5

132

あなたが見ているフレームワークのほとんど(すべて?)は同じ問題を解決しますが、それらはわずかに異なる目標でわずかに異なる方法でそれを行います。

これらのプロジェクトはすべて、これらのカテゴリの問題を解決すると言っても過言ではありません。

  • 賢明なデフォルトのセットを提供する
  • ボイラープレートコードを減らす
  • BackboneJSビルディングブロックの上にアプリケーション構造を提供する
  • 著者がアプリで使用するパターンを抽出する

私が2011年12月から構築しているマリオネットには、いくつかの非常に明確な目標と理想も念頭に置いています。

  • 複合アプリケーションアーキテクチャ
  • エンタープライズメッセージングパターンの影響
  • モジュール化オプション
  • 増分使用(オールオアナッシングの要件なし)
  • サーバーのロックインなし
  • これらのデフォルトを簡単に変更できるようにする
  • 設定より規約/設定より規約

他のフレームワークのどれもこれらの同じ目標を持っていないと言っているのではありません。しかし、マリオネットの独自性は、これらの目標の組み合わせに由来すると思います。

複合アプリケーションアーキテクチャ

私は、WinFormsとC#を使用したシッククライアントの分散ソフトウェアシステムで5年以上働いていました。デスクトップ、ラップトップ(スマートクライアント)、モバイルデバイス、およびWebアプリケーション用のアプリを作成しました。これらはすべてコア機能セットを共有し、同じサーバーバックエンドで何度も動作します。今回、私はモジュール化の価値を学び、複合アプリケーション設計の道を非常に急速に進みました。

基本的な考え方は、アプリケーションのランタイムエクスペリエンスを「構成」し、必ずしも相互に認識しているとは限らない多数の小さな個々の部分から処理することです。それらは、複合アプリケーションシステム全体に登録され、分離されたメッセージや呼び出しのさまざまな手段を介して通信します。

これについてブログに少し書いたので、Backboneの複合アプリケーションアーキテクチャとしてMarionetteを紹介しました。

メッセージキュー/パターン

同じ大規模な分散システムでも、メッセージキュー、エンタープライズ統合パターン(メッセージングパターン)、およびサービスバスを利用してメッセージを処理しました。これは、何よりも、分離されたソフトウェア開発への私のアプローチに多大な影響を及ぼしました。私はこの観点から単一プロセスのメモリ内WinFormsアプリケーションを見始め、すぐにサーバー側とWebアプリケーション開発がこれから影響を受けました。

これは、私がBackboneアプリケーションの設計をどのように見ているかに直接変換されています。マリオネットで、高レベルのApplicationオブジェクトと、アプリケーション内で作成する各モジュールの両方にイベントアグリゲーターを提供します。

モジュール間で送信できるメッセージ(コマンドメッセージ、イベントメッセージなど)について考えます。また、サーバー側の通信も同じパターンのメッセージだと思います。いくつかのパターンはすでにマリオネットに浸透していますが、まだ浸透していないパターンもあります。

モジュール化

コードのモジュール化は非常に重要です。明確に定義された入口点と出口点を備えた単一の焦点を持つ、小さく、十分にカプセル化されたパッケージを作成することは、あらゆる重要なサイズと複雑さのシステムにとって必須です。

マリオネットは、その定義を通じて直接モジュール化を提供しmoduleます。しかし、RequireJSが好きで、それを使いたいと思っている人もいることも認識しています。そのため、標準ビルドとRequireJS互換ビルドの両方を提供します。


MyApp = new Backbone.Marionette.Application();

MyApp.module("MyModule", function(MyModule, MyApp, Backbone, Marionette, $, _){

  // your module code goes here

});

(これに関するブログ投稿はまだありません)

増分使用

これは、私がマリオネットのすべての部分に焼き付ける中心的な哲学の1つです。つまり、マリオネットを使用するための「オールオアナッシング」の要件はありません。

バックボーン自体は、すべてのビルディングブロックオブジェクトに対して非常に段階的でモジュール式のアプローチを採用しています。いつ、使用したいものを自由に選択できます。私はこの原則を強く信じており、マリオネットが同じように機能するように努めています。

そのために、私がマリオネットに組み込んだピースの大部分は、スタンドアロンで動作し、バックボーンのコアピースと連携し、さらにうまく連携するように構築されています。

たとえば、ほぼすべてのバックボーンアプリケーションは、画面上の特定の場所にバックボーンビューを動的に表示する必要があります。アプリは、古いビューを閉じたり、新しいビューが配置されたときにメモリをクリーンアップしたりする必要もあります。ここで、マリオネットRegionが登場します。リージョンは、ビューを取得し、その上でレンダリングを呼び出し、結果をDOMに詰め込むという定型コードを処理します。次に、ビューに「閉じる」メソッドがある場合は、そのビューを閉じてクリーンアップします。


MyApp.addRegions({
  someRegion: "#some-div"
});

MyApp.someRegion.show(new MyView());

ただし、リージョンを使用するためにマリオネットのビューを使用する必要はありません。唯一の要件は、オブジェクトのプロトタイプチェーンのある時点でBackbone.Viewから拡張することです。closeメソッド、メソッド、またはその他を提供することを選択した場合onShow、マリオネットの地域は適切なタイミングでそれを呼び出します。

サーバーのロックインなし

さまざまなサーバーテクノロジーの上にBackbone/Marionetteアプリを構築しています。

  • ASP.NET MVC
  • Ruby on Rails
  • ルビー/シナトラ
  • NodeJS / ExpressJS
  • PHP/スリム
  • Java
  • Erlang
  • ... もっと

JavaScriptは、ブラウザーでの実行に関してはJavaScriptです。サーバーサイドのJavaScriptも素晴らしいですが、ブラウザーベースのJavaScriptの記述方法には影響も影響もありません。

私が構築したプロジェクトとクライアントが使用するバックエンドテクノロジーは多様であるため、何らかの理由でマリオネットを単一のサーバー側テクノロジースタックに固定することはできません。ボイラープレートプロジェクトは提供しません。rubygemやnpmパッケージは提供しません。マリオネットは特定のバックエンドサーバーを必要としないことを人々に理解してもらいたい。これはブラウザベースのJavaScriptであり、バックエンドは関係ありません。

もちろん、私は他の人々が彼らの言語とフレームワークのためのパッケージを提供することを完全にサポートします。私はそれらのパッケージをWikiにリストし、人々が必要に応じてさらに多くのパッケージを構築し続けることを望んでいます。しかし、それはコミュニティのサポートであり、マリオネットからの直接のサポートではありません。

デフォルトを簡単に変更

ボイラープレートコードを減らし、賢明なデフォルトを提供するための努力の中で(これは、Tim BranyenのLayoutManagerから直接「借用」したアイデアです)、他の開発者が私とは少し異なる実装を使用する必要があることを認識しています。

<script>デフォルトでUnderscore.jsテンプレートを使用して、テンプレートのインラインタグに基づいてレンダリングを提供します。Rendererただし、マリオネットのオブジェクトやオブジェクトを変更することで、これを置き換えることができますTempalteCache。これらの2つのオブジェクトは、レンダリング機能のコアを提供し、特定のテンプレートエンジンおよびテンプレートをロードするさまざまな方法のためにこれを変更する方法を示すwikiページがあります。

マリオネットのv0.9を使用すると、さらに簡単になります。たとえば、インラインテンプレートスクリプトブロックの使用を事前にコンパイルされたテンプレートに置き換える場合は、レンダラーの1つのメソッドを置き換えるだけで済みます。


Backbone.Marionette.Renderer.render = function(template, data){
  return template(data);
};

templateこれで、アプリケーション全体で、ビューの属性に添付するコンパイル済みのテンプレートが使用されます。

非同期レンダリングビューをサポートできるv0.9のMarionette.Asyncアドオンも提供しています。私は、マリオネットのデフォルトの動作を可能な限り簡単に置き換えることができるように継続的に努力しています。

構成としてのコード

私は特定の状況での「設定より規約」のファンです。これは物事を成し遂げるための強力な方法であり、マリオネットはこれを少し提供します-正直言って、あまり多くはありませんが。他の多くのフレームワーク(特にLayoutManager)は、Marionetteよりも設定より規約を提供します。

これは、目的と意図を持って行われます。

私は、コンベンションを意味のある高速な方法で機能させようとする苦痛を知るのに十分なJavaScriptプラグイン、フレームワーク、アドオン、およびアプリケーションを構築しました。それはスピードで行うことができますが、通常はそれを変更できるという犠牲を払って行われます。

そのために、私はマリオネットに対して「構成としてのコード」アプローチを採用しています。一連の動作を変更する静的な値を持つオブジェクトリテラルを提供できる「構成」APIはあまり提供していません。代わりに、注釈付きのソースコードと実際のAPIドキュメントの両方を通じて、各オブジェクトが持つメソッドをドキュメント化し、Marionetteを希望どおりに機能するように変更する方法を説明します。

マリオネットオブジェクトにクリーンでクリアなAPIを提供することで、特定のオブジェクトまたはマリオネット全体の動作を置き換えることが比較的簡単で非常に柔軟な状況を作成します。「単純な」構成API呼び出しを犠牲にして、独自のコードを提供して、希望どおりに機能させる柔軟性を実現します。

Marionetteには「configure」または「options」APIはありません。しかし、マリオネットの動作を簡単に変更できる、クリーンな署名を備えた非常に特定の目的を果たす多数のメソッドがあります。

于 2012-06-13T13:50:15.257 に答える
25

私は現在、テンプレートマネージャーとしてレイアウトマネージャーモジュールとハンドルバーを備えたバックボーンを使用していますが、既存のGrailsバックエンドを使用して小さなアプリケーションをセットアップするのは本当に簡単でした。レイアウトマネージャーを使い始める前に、マリオネットとチャップリンについて読みましたが、どちらも非常に強力ですが複雑に見えました。それから、私が最初にbackbone.jsを選んだ理由を思い出しました:シンプルさ。これらのフレームワークはすべて、バックボーンが設計上省略したものを追加しています。フレームワークが悪いと言っているわけではありませんが、もっと複雑なものが必要な場合は、開発者の心に目標を持って書かれた独自のコードベースがあるため、ember.jsやsproutcoreなどの他のプロジェクトを試してみます。ここでは、別のフレームワークの上にフレームワークがあります。もちろん、バックボーンは、アプリケーションを構築するためだけでなく、より強力なライブラリを作成するためのバックボーンでもあります。しかし、レイアウトマネージャーがなく、ビューをネストできる可能性があるため、ビューレイヤーが非常に貧弱だと思います。レイアウトマネージャーを使えば、そのギャップはかなり埋められます。

ですから、あなたの質問に対する私の答えは、バックボーンをそのまま使用することから始めて、何が欠けているのか、そしてフレームワークについて何を期待していたのかを自問することです。バックボーンに残されているものが多すぎる場合は、他のフレームワークでそれらを検索し、ニーズに最も近いものを選択してください。それでも選択に自信がない場合は、バックボーンが適切ではない可能性があり、他のソリューションを探す必要があります(ember.js、sproutcore、ExtJs、JavaScript MVCはすべて優れています)。クライアントアプリの作成経験がある場合は、適切なフレームワークを選択するために、そこにあるすべてのフレームワークの経験は実際には必要ありません(もちろん、あなたにとって)

于 2012-06-05T21:18:39.860 に答える
13

私はBackbone.jsで構築されたさまざまなフレームワークを研究し、HauteLookでのプロジェクトのためにVertebraeを構築しました。プロジェクトの目標は次のとおりです...動的スクリプトの読み込み、AMDモジュール形式、依存関係の管理、ほとんどオープンソースライブラリを使用したビルド、パッケージ内のコードの整理、1つまたは複数のシングルページアプリの最適化とビルド、完全にキャッシュされたサーバーでのホスト(サーバーなしなど) -データ用のAPIのみを使用するサイドスクリプト、そして私にとって最も面白いのは、プロジェクトの動作駆動型開発を使用することです。プロジェクトの説明は次の場所にあります:http://www.hautelooktech.com/2012/05/24/vertebrae-front-end-framework-built-with-backbone-js-and-requirejs-using-amd/

私たちの問題:

選択したライブラリ(jQuery、Underscore.js、Backbone.js、RequireJS、Mustache)は、モジュールの読み込み、依存関係の管理、アプリケーション構造(モデル、コレクション、ビュー、ルート用)、APIとの非同期相互作用、非同期動作を管理するためのさまざまなユーティリティとオブジェクトを提供します例:(約束)延期、コールバック。フレームワークを完成させるために必要な残りのロジックは次のとおりです。

  • シングルページアプリケーションの状態を管理するためのオブジェクト(モデル)。
  • ビューを提示、配置/移行、クリアするためのレイアウトマネージャー、および
  • ルートに応答し、アプリケーションの状態を取得/設定し、作業をレイアウトマネージャーに渡すコントローラー。

当社のソリューション(Vertebraeで実装):

アプリケーション状態マネージャー-

アプリケーションマネージャはデータをメモリに保存し、ブラウザストレージにデータを保持して、共通のデータ/メタデータのリソースを提供します。また、以前のインタラクション(選択したタブ、適用されたフィルターなど)に基づいてページビューを再構築するためのデータ(状態)も提供します。アプリケーション状態マネージャーは、リソースが状態を取得するための戦略を提供します。ステートマシンとして機能することを意味します。

レイアウトマネージャー-

レイアウトマネージャーには、1つまたは複数のビューと、各(レンダリングされた)ビューのドキュメント(DOM)の宛先があります。ページは多くのビュー間で遷移する可能性があるため、レイアウトマネージャーは、ビューの状態(レンダリング、非レンダリング、表示、非表示など)を追跡します。レイアウトマネージャーを使用して、サイト訪問者が要求する可能性が非常に高いビューの遅延読み込みとレンダリング(デタッチ)を行うことができます。たとえば、ページのタブの変更などです。ビューステート間の遷移は、このオブジェクトによって管理されます。レイアウト全体をクリアして、ビューオブジェクトとそのバインディングを削除し、これらのオブジェクトをガベージコレクション用に準備することができます(メモリリークを防止します)。レイアウトマネージャーは、ビューステートをコントローラーとも通信します。

コントローラー-

コントローラオブジェクトはルートハンドラ関数によって呼び出され、関連する状態(アプリケーションモデル)を取得してページ(レイアウト)を生成します(ルートが変更されたときの状態の設定も行います)。コントローラーは、要求されたページの依存データ(モデル/コレクション)と構築されたビューオブジェクトをレイアウトマネージャーに渡します。副作用として、コントローラーを使用すると、ルートオブジェクトが肥大化して絡まるのを防ぐことができます。ルートはコントローラーにマップする必要があります。コントローラーは、ルート処理機能を無駄なく維持しながら、ページビューを開始します。

Todosアプリは、開発モードでホストされ、Herokuで最適化されています...

他のフレームワークの概念の多くは借用されています。たとえば、Derick Baileyが指摘したように、メモリリークをプレビューするためにビューを破棄する必要があります-http: //lostechies.com/derickbailey/ ; TimBranyenによるレイアウトマネージャーhttp://tbranyen.github.com/backbone.layoutmanager/

要約すると、Backbone.jsは、アプリケーションのツールとなることを目的としています。Backbone.jsライブラリは、アプリケーションの構築に必要なすべてのアーキテクチャを提供するわけではありませんが、APIとの優れた相互作用と堅実なコード構造を提供します...ビュー(コントローラーのようにも機能します)とデータレイヤーのモデルとコレクション、そして最後にルート。私たちは、プロジェクトの目標を達成するためにVertebraeを構築し、他の人が使用したり、学習したりするためのフレームワークとしてコードを抽出することにしました。

私の意見では、あなたの質問に対する答えは、すべてのフレームワークから学び、目標を達成するために必要なものを使用することです。プロジェクトの目標が、Backboneで構築されたフレームワークのいずれかにぴったり合っていることがわかった場合は、それ以外の場合は独自のフレームワークを構築します。コミュニティによって共有されている素晴らしい例があります。または、アプリケーションの方向性に少し迷っている場合は、もっと意見があり、構造化されたもの、おそらくEmber.jsを選択してください。すばらしいのは、JavaScriptで(MVX)MVCのようなパターンを使用してコーディングするのに役立つさまざまな選択肢があることです。

于 2012-06-05T22:34:31.620 に答える
13

私はBenchPrepで働いているとき にLucaフレームワークを開発しました。そこでは、それを使用して、backbone.jsライブラリの上にいくつかの大きなシングルページアプリを開発しました。

私は数年前にExtJSを使用していて、ビューをスタンドアロンコンポーネントとして開発し、コンテナービューを使用して他のコンポーネントと結合するコンポーネント駆動型アーキテクチャなど、そのフレームワークからお気に入りの概念を盗みました。また、構成に大きく依存しているため、Lucaでアプリを開発することは、JSONを使用してオブジェクトを記述するのとよく似ています。

このアプローチの利点の1つは、Backboneの拡張機能を使用してわずかな変更を加えるだけで、複数のアプリ間またはアプリ内のさまざまな場所でコンポーネントを再利用できることです。また、JSON構成にわずかな調整を加えるだけで、コンポーネントのさまざまなレイアウトやプレゼンテーションを簡単に試すことができます。

幅広いヘルパー/ユーティリティ機能に加えて、Lucaには、複雑なUIを構築するために想像できるあらゆる方法で組み合わせることができる多くの高レベルのバックボーン派生物が付属しています。

ビュー、コンポーネント、コンテナ

  • 拡張モデル、ビュー、コレクション、ルータークラス
  • モデル、コレクション、ビュー、アプリケーション、およびそれぞれのマネージャー間の通信を容易にする構成オプション。
  • コンテナ(分割/列レイアウト、グリッドレイアウト、タブビュー、カード/ウィザードビュー)
  • すべての標準フィールドコンポーネントを備えたFormView、およびBackbone.Modelと同期するためのヘルパー
  • Luca.Collectionからスクロール可能なグリッド要素を生成するためのGridView
  • CollectionView、コレクションに基づいてビューを生成するため
  • ツールバー/ボタン

Twitterのブートストラップスタイルとマークアップを無料で

  • LucaはTwitterブートストラップフレームワークで非常にうまく機能します。Luca.enableBootstrap = trueを設定し、CSSを含めるだけで、コンポーネント(タブビュー、ツールバー、ボタン、フォーム、フィールド、グリッドなど)は、TwitterBootstrap互換のマークアップとCSSクラスの規則を自動的に使用します。
  • レイアウトにグリッドシステムを使用し、ほとんどのブートストラップベースのcssクラスにインテリジェントな方法で応答します
  • Luca.ViewportおよびGridLayoutコンポーネントは、ブートストラップのレスポンシブ、流動的、または静的グリッドシステムで動作するように設定されています。
  • 構成可能なバックボーンビューとしてそれらを表すために、Twitterブートストラップコンポーネントに1対1の一致を提供することを目的としています

アプリケーションコンポーネント

  • Backbone.Modelベースのステートマシンは、アプリケーション制御フローのスタイルとして、ゲッター/セッターメソッドと属性変更イベントを提供します
  • Backbone.RouterまたはStateMachineイベントに応答してアプリのページを非表示/表示する統合コントローラーコンポーネント
  • 作成したコレクションを追跡し、スコープを設定し、グループ化し、デフォルトのパラメーターを割り当てることができる統合コレクションマネージャー
  • Backbone.Eventと同じくらい簡単にプッシュできるWebSocketサービスの上にある抽象化レイヤーであるSocketManager
  • そのようなイベントに応答することを気にするコンポーネントで名前付きキーイベントをトリガーするキーボードイベントルーター

コレクションとモデルの機能強化

  • コレクションはbackbone-queryに基づいており、mongoDbと非常によく似たクエリインターフェイスを提供します。
  • collection.localStorage = trueを設定するだけで、ローカルストレージBackbone.syncを有効にします
  • ページの読み込み時にデータがブートストラップされるコレクションの自動入力
  • キャッシュされたメソッド/計算されたプロパティ。コレクションメソッドの結果をキャッシュし、コレクションまたはそのモデルのイベントの変更/追加/削除に応じてキャッシュを期限切れにします
  • モデルの計算されたプロパティ。複雑な関数に基づいて属性を構築し、変更に応じて計算値を自動的に更新します

イベントとフック

Lucaコンポーネントは、ストックのBackboneコンポーネントと比較して、それらが発行するイベントに対してより寛大です。これらは、before:initialize、after:initialize、before:render、after:render、activation、first:activation、deactivation、first:deactivationなどのイベントを発行します。これにより、コンポーネントの動作をより細かく調整できます。さらに、ビューの@hooks porpertyでイベントを定義することにより、同じ名前の関数が存在する場合は自動的に呼び出されます。これにより、読みやすさを向上させる多くのコールバックスタイルコードが防止されます。

Luca.Eventsクラスを構成して、イベントをグローバルパブリッシュ/サブスクライブチャネルにパブリッシュすることもできます。これにより、大規模なアプリケーションの構築が容易になり、モジュール間の通信が容易になります。

RubyGem

Lucaは、RailsおよびSinatra APIに対して作業しているときに特別に開発されました。このため、現在、特定のスタック用に最適化されていますが、特定のサーバーに固定されることはありません。

Lucaは、アセットパイプラインで動作するように構成されたRuby Gemの一部として、またはダウンロード可能なJSファイルとして配布されます。

RailsやSinatraを使用する必要はありません。しかし、あなたがそうするなら、私はたくさんの役に立つものを含めました:

  • 拡張子が.lucaのファイルは、JSTスタイルの変数補間を使用してHAMLとして処理されます。(.jst.ejs.hamlと同等)アセットパイプラインによる
  • ブラウザ用のテストハーネス、またはヘッドレスのJasmineベースのユニットテストと、多くのバックボーンおよびアンダースコアのテストヘルパー。
  • Lucaに同梱されている開発ツールセットのAPIエンドポイント(これについては後で詳しく説明します)
  • 最小限の構成でLuca.CollectionのスキーマレスストレージエンジンとしてRedisを使用できるようにするAPIエンドポイント

開発ツール

  • Lucaアプリケーションは、Lucaアプリケーションとコンポーネントの監視、検査、デバッグを支援するLuca固有のヘルパーとコマンドを使用してブラウザー内のコーヒースクリプトコンソールを有効にすることができます。

CoffeeScriptを搭載したブラウザ開発コンソールのLucaの例

  • Rails GemとLucaのCodeMirrorベースのコンポーネントエディタを使用すると、Coffeescriptを使用して、LucaFrameworkのソースコードとアプリケーション固有のコンポーネントをブラウザで直接編集できます。編集に応じて即座にフィードバックが表示され、影響を受けるオブジェクトのインスタンスが更新されたプロトタイプで更新され、変更をディスクに保存できます。

  • コンポーネントテスターは、アプリケーションを個別に構成するコンポーネントを操作するためのライブサンドボックスです。コンポーネントのプロトタイプを変更し、その依存関係を設定し、コンポーネントを構成するためのツールを提供します。編集するたびに、コンポーネントはすぐに再レンダリングされます。コンポーネントが生成するマークアップとCSSをブラウザで直接表示および編集して、変更をすぐに確認できます。これは非常に価値のある実験ツールになります。

  • コンポーネントテスターはまもなくJasmineと統合されるため、コードを編集するときにコンポーネント単体テストの結果をリアルタイムで表示できます。

コンポーネントテスターのスクリーンショット

Lucaは進行中の作業ですが、安定したAPI(まだ1.0ではありません)を維持しており、いくつかの大規模な本番アプリで使用されています。それは間違いなく非常に意見の分かれるフレームワークですが、私はそれをよりモジュール化することに取り組んでいます。私はドキュメントとサンプルコンポーネントに積極的に取り組んでいます。

于 2012-06-21T04:10:51.210 に答える
11

私はChaplinの共著者であり、Chaplin.jsとMarionette.jsの詳細な比較を作成しました。

http://9elements.com/io/index.php/comparison-of-marionette-and-chaplin/

これは「シュートアウト」ではありませんが、両方のアプローチをバランスの取れた方法で説明しようとします。

于 2013-04-11T09:28:07.120 に答える