0

イベントとタスクを含む Titanium アプリを開発しています。これらをクラウド ストレージに同期して、ユーザーがログインを提供している限り、任意のアプリまたはブラウザーからイベントとタスクにアクセスできるようにしたいと考えています。

Appcelerator/Titanium はこれをすべて非常に簡単にしているように見えますが、それを文書化するのはひどいものです。多分私は理解していません。それで、私が下に描いた絵を誰でも確認または修正できますか?

  1. Titanium Alloy アプリでは、モデルを /models フォルダー内の JSON ファイルで定義することにより、モデルを作成できます。このオブジェクトのプロパティを次のように指定すると、adapter: {type:'acs'}... オブジェクトに対して .save() コマンドを呼び出すたびに、Alloy がオブジェクトを ACS に保存するように見えます。

  2. これを機能させるには、もちろんアプリを ACS に接続する必要があります。これは、tiapp.xml のグラフィック インターフェイスで [Cloud-enable] ボタンをクリックして行います。もちろん、アプリが特定のユーザ名とパスワードの組み合わせを使用して ACS にログインすることを確認する必要があります。

私の情報源を楽観的に見ると、あなたがする必要があるのはこれだけのようです. それらのソースは次のとおりです。

しかし、その後、誰もがAaron Saundersによるサンプル プロジェクトを参照しているのを目にします。このプロジェクトには、この adapter:{type:'acs'} を可能にするために Alloy の上に構築されているように見えるいくつかのカスタム ファイルが含まれています。私が話していることを確認するには、app/assets/alloy/sync フォルダーに移動し、そこにある acs.js ファイルを確認してください。また、1 年前のTony Lukasavageによる Q&A 回答によると、Alloy 用の ACS 同期アダプターは現在構築されていません。彼は解決策として Aaron Saunders のプロジェクトhttp://alloylove.com/#を挙げています。

どうしたの?それは実際にすべて Alloy/Backbone に組み込まれており、どこにも文書化されていません.Aaron Saunders はサンプル プロジェクトに組み込みのものを使用していますか?

ヒントをありがとう!ウィッツェ

自己メモ: 新しいプロジェクトを作成する必要があるこの例も試してみてください: https://wiki.appcelerator.org/display/td/11.+Storing+data+in+ACS

4

2 に答える 2

3

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 クラウドに同期されます。しかし、トラフィックを反対方向に移動させたい場合、トラフィックはどのように機能するのでしょうか? クラウドにあるデータに変更が加えられた場合、どのように通知されますか? 購読する必要がありますか?

  • アプリがオフラインになるとどうなりますか? アプリがオンラインに戻るまで、保留中のデータの変更はキャッシュされますか? キャッシュされたデータを同期する前にアプリを閉じるとどうなりますか?

于 2014-10-04T08:43:33.697 に答える
0

さて、私はそれを理解しました。ACS に同期するためにオブジェクト定義に adapter: {type:'acs'} を追加するだけの「簡単な」例は、Aaron Saunders のサンプル コードに依存しています。彼の最良の説明はこちら: https://github.com/aaronksaunders/ci.alloy.adapter.two

彼のものを使いたい場合は、基本的に彼のプロジェクトから自分のプロジェクトに 2 つのファイルをコピーするだけです: sync/acs.js (これは彼のもののコアです)

私には有望に思えますが、今のところ、私は独自の方法で独自のオブジェクトを作成し、通常の Ti.Cloud メソッドを使用してそれらを ACS に同期していると思います。

于 2014-09-29T09:25:09.570 に答える