1


iOSおよび Android で動作します

次のようなモデルがあります。

    exports.definition =
        config:
            columns:
                cookie: "string"
            defaults:
                cookie: ""
            adapter:
                # is this valid?
                type: "sql"
                collection_name: "userInfo"
        extendModel: (Model) ->
            _.extend Model::,
                isSignedIn:->
                    this.get('cookie').length > 0
            Model

そして index.xml:

<Alloy>
    <Model id="userInfo" src="userInfo" instance="true"/>

そのため、このuserInfoプロパティはアプリのライフサイクル中に変更され、ユーザーがログインし、その Cookie を永続化し、アプリの初期化時に自動ロードしたいと考えています。

このフレームワークでそれを行うにはどうすればよいですか?

別の Q&A を更新
ここで参照: http://developer.appcelerator.com/question/147601/alloy---persist-and-load-a-singleton-model#255723

4

2 に答える 2

3

appcelerator のドキュメントでは詳しく説明されていませんが、組み込みの Alloy プロパティ同期アダプターを使用してプロパティを保存および取得する場合は、モデルを使用するときに一意の「id」を指定する必要があります。xml マークアップで既に実行していますが、<Model id="userInfo"それはそのビュー ファイルでのみ機能します。コントローラーでこのプロパティにアクセス/更新する場合は、次のようにします。

var UserInfo = Alloy.createModel("userInfo", {id: "userInfo"});
UserInfo.fetch();
UserInfo.set("cookie", "new value");
UserInfo.save();

コード全体でこのプロパティへの参照を保持したい場合は、それを Alloy.js のグローバル名前空間にアタッチするだけでよいと思います。

var UserInfo = Alloy.createModel("userInfo", {id: "userInfo"});
UserInfo.fetch();
Alloy.Globals.UserInfo = UserInfo;

コントローラーで次のことを行います。

var UserInfo = Alloy.Globals.UserInfo;
于 2013-10-22T14:24:50.190 に答える
2

userInfo.jsモデルを に入れるapp/modelと、おそらく次のようになります。

exports.definition = {

    config : {
        "columns" : {
            "cookie" : "string"
        },
        "defaults" : { "cookie" : "" }
        "adapter" : {
            "type" : "sql",
            "collection_name" : "userInfo"
        }
    },

    extendModel : function(Model) {
        _.extend(Model.prototype, {
            isSignedIn : function() {
                this.get('cookie').length > 0
            }
        });
        return Model;
    },

    extendCollection : function(Collection) {
        _.extend(Collection.prototype, {
        });
        return Collection;
    }
}

ここからは、何をしたいかによって異なりますが、コレクションからモデルを簡単に取得できます。これを xml ファイルにuserInfo入れるだけです。<Collection src="userInfo"/>

補足として、私は通常、Titanium.App.Propertiesユーザー情報を保存するために使用します。プロパティは、アプリケーション セッションやデバイスの電源サイクルを超えて保持されるプロパティ/値のペアで、アプリケーション関連のデータを格納するために使用されます。例えば:

// Returns the object if it exists, or null if it does not
var lastLoginUserInfo = Ti.App.Properties.getObject('userInfo', null);
if(lastLoginUserInfo === null) {
    var userInfo = {cookie : "Whatever the cookie is", id : "123456789"};
    Ti.App.Properties.setObject('userInfo', userInfo);
} else {
   // Show the cookie value of user info
   alert(lastLoginUserInfo.cookie);
}
于 2013-01-30T14:29:34.477 に答える