Aaron Saunders の ACS Sync のコツをつかみました。彼の README は、私が始めたときよりも少し予備知識があることを前提としているので、将来の参照用に自分の小さなマニュアルをここに置くことにしました。
まず、最初にバックボーンを理解し、次に合金とバックボーンの特定の組み合わせを理解する必要があります。Backbone を使用すると、オブジェクト指向の Javascript を実行できます。アプリが書籍に関するものである場合、Book が一般的にどのように見えるべきかを定義します。これをクラスと呼ぶこともできますが、Backbone ではモデルと呼びます。なんでもいい。
基本的に、Backbone は 1 つの Javascript オブジェクトをテンプレート (モデル) に変換し、そこから任意の数の特定のインスタンスを作成できます。このモデル (Javascript オブジェクトでもある) のインスタンスを作成することにより、オブジェクトの値が何らかの方法で変更されたときに起動するイベント リスナーを追加するオプションなど、そのオブジェクトに一連の機能を提供します。
バックボーン モデルとそのインスタンスの作成
Alloy を使用していない場合、Backbone モデルを作成する方法は次のとおりです。
var Book = Backbone.Model.extend({});
この例では、仕様をまったく追加していません。そのため、作成された「ブック」テンプレート/モデルは、イベント リスナーを追加するオプションなど、多くのバックボーン機能を取得しますが、自分でカスタマイズしたものは何もありません。
次に、new
キーワードを使用して、このモデルの特定のインスタンス、つまり特定の本を作成できます。お気に入り:
var myNewBook = new Book({title:"Moby Dick"}};
合金モデル: アプリ/モデル内のファイル
現在、Alloy は app/models フォルダー内の特定のファイルでモデルが定義され、ファイルの名前がモデルの名前になるように機能します。したがって、合金の方法で Book モデルを作成する場合は、ファイル app/models/book.js を作成する必要があり、そのファイルは次のような構造の 1 つのエクスポートを提供する必要があります (例として Book の概念を使用)。
exports.definition = {
config: {
columns: {
"title": "String",
"pages": "Number",
},
defaults: {
"title": "Default book title",
"pages": 0,
},
adapter: {
"type": "sql"
}
}
}
これは、モデルについて定義する最低限のものであることに注意してください。そして、「アダプター」ビットは非常にオプションです。なぜそれを含めたのかは後で明らかになります。これが行うことは、Backbone がこのモデル (メモリにのみ格納されている) から作成された Javascript オブジェクトを特定のデータ ストアに同期するように指定することです。
もっと多くのことを定義したいと思うでしょう。実際、Backbone/Alloy/ACS の同期を行いたい場合は、そうする必要があります。しかし、まず、Javascript で Backbone オブジェクトを作成してみましょう。
Alloy モデルから Backbone オブジェクトを作成する
これで、Book モデルのインスタンスを作成するときはいつでも、コードで行うことはAlloy.createModel
、正しいモデル名とパラメーターのディクショナリを使用することだけです。そのようです:
var oneBook = Alloy.createModel('Book',{title:"Moby Dick",pages:300});
Alloy は app/models フォルダーで「book.js」ファイルを探し、そこで定義されているすべてのプロパティを使用して、いくつかの Alloy ベルとホイッスルが添付された Backbone オブジェクトを返します。
(合金はモデルという言葉の意味について少し混乱しているように見えることに注意してください。実際にモデルを作成しているのではなく、モデルのインスタンスを作成しているのです。または、単に理解できないだけかもしれません)
ACS アダプター
Alloy/Backbone オブジェクトの同期を自動化するための Aaron Saunders のソリューションには、Alloy がバックボーン モデルを使用する方法を適応させることが含まれます。これが、すべてが機能するために、彼のプロジェクトから少なくとも 2 つのファイルを含める必要がある理由です。
- /app/assets/alloy/sync/acs.js (これは、Alloy/Backbone オブジェクトを ACS に同期するように調整する「アダプター」です)
- app/alloy.jmk (このファイルは、アプリのインストール時に必要なファイルシステムの書き換えを行います)
これらのファイルをインストールすると、バックボーン同期機能が「acs」と呼ばれる新しいアダプターを利用できるようになります。
バックボーン モデルには、オブジェクトを SQLite データベースなどのデータ ストアや localStorage に同期する機能など、あらゆる種類の追加機能があります。また、Backbone を使用すると、プログラマはデータをカスタム データ ストアに同期するように指示する「アダプタ」を作成できます。
Aaron Saunders のソリューションは、データを ACS に同期します。acs.js ファイルを適切なフォルダーに含めることで、Backbone/Alloy がそのファイルを使用して同期を整理するようにします。
ハッキーな部分
したがって、上記で定義したように Book モデルを定義し、Alloy.createModel() を使用して Javascript で Book を作成すると、Alloy は book.js ファイルを探し、カスタム値を追加するテンプレートとして使用します。 (タイトルのように)指定します。
また、acs.js アダプターのおかげで、新しいオブジェクトが ACS に自動的に送信されます。
つまり、あなたが少し手伝ってくれれば、後で片付けるかもしれないが、今のところはまだ必要なハッキーなビットがあるからです。つまり、モデル定義内に、オブジェクトの名前を繰り返す 2 つのパラメーターを持つ設定ディクショナリを含める必要があります。(はい、ばかげているように聞こえます)
したがって、これはモデル ファイルの完全な例です。
exports.definition = {
config: {
columns: {
"title": "String",
"pages": "Number",
},
defaults: {
"title": "Default book title",
"pages": 0,
},
adapter: {
"type": "acs"
},
"settings": {
"object_name": "users",
"object_method": "Users"
}
}
}
結論として
、これがどのようにアロイがバックボーンの上に構築され、アーロン・サンダースがその組み合わせの上にどのように構築されているかを明確にするのに役立つことを願っています.
私がまだ自分で答えていない質問は次のとおりです。
コード内のモデルから Backbone オブジェクトを作成すると、ACS クラウドに同期されます。しかし、トラフィックを反対方向に移動させたい場合、トラフィックはどのように機能するのでしょうか? クラウドにあるデータに変更が加えられた場合、どのように通知されますか? 購読する必要がありますか?
アプリがオフラインになるとどうなりますか? アプリがオンラインに戻るまで、保留中のデータの変更はキャッシュされますか? キャッシュされたデータを同期する前にアプリを閉じるとどうなりますか?