在iOs& Android的
的CoffeeScript
我有一个模型如:
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的持久性以及在app init上自动加载。
我如何在这个框架中做到这一点?
更新另一个Q&amp; A
供参考:http://developer.appcelerator.com/question/147601/alloy---persist-and-load-a-singleton-model#255723
答案 0 :(得分:3)
他们在appcelerator文档中没有很好地解释它,但如果你想使用内置合金属性同步适配器来存储和检索属性,你必须在使用模型时指定一个唯一的“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;
答案 1 :(得分:1)
将您的模型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;
}
}
从这里开始,这取决于你想要做什么,但是你可以轻松地从集合userInfo
中获取模型,只需将这个:<Collection src="userInfo"/>
放在你的xml文件中。
作为旁注,我通常只使用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);
}