Titanium appcelerator模型和集合持续

时间:2016-06-13 17:18:08

标签: titanium titanium-mobile titanium-alloy appcelerator-titanium titanium-android

我即将从远程检索数据并创建模型和集合,这里是应用程序的每个部分(控制器,视图和模型)。 如果我真的明白在钛中使用模型就像存储到数据库中一样,即使在我获得所有数据之后没有互联网连接,数据仍然存在。 下面的代码运行良好,似乎连接丢失后没有数据显示,所以我问自己在钛中使用模型而不是使用经典方式有什么好处:从xhr检索并显示数据? 2-我的第二个问题(如果我错了)在检索数据并存储到模型后,我可以在另一个页面内没有xhr的情况下检索它吗? 3-最后一个:从Alloy.js检索数据并保存到模型是一个好习惯,因为我需要在所有应用程序页面中使用数据吗?

控制器

// This is an istance of my xhr library
var XHR = require('xhr');
var xhr = new XHR();

$.win.addEventListener('open', function(){
  
  url = 'mydomain.com/api/get_posts';
  xhr.get(url, onSuccess, onError);

});

function onSuccess(response){
  
  if(typeof response !== null ){
   datas = JSON.stringify(response.data);
   postsModel = [];
   _.each(datas, function(data){
     
     /* Create model */
     postsModel.push(Alloy.createModel('mypostsmodel',{
       title : data.title,
       id : data.id
     }));
     
   });
    
    $.posts.reset(postsModel);
  }
}

**视图**

<Alloy>
	<Collection src="myposts" instance="true" id="myposts" />
	<Window id="win" title="Inscription" class="container" >
		<View id="posts_view" class="myposts" dataCollection="$.myposts">
				<View postId="{id}" class="post_item">
					<Label class="post_label" text="{title}" />
					<Label class="exp" id="exp_{id}" text="" />
				</View>
			</View>
		</View>
</Alloy>

模型

exports.definition = {
	config: {
		"columns": {
            "title": "Text",
            "id": "Integer"
        },
        "defaults": {
            "title": "-",
            "id": "-"
        },
		adapter: {
			type: "sql",
			collection_name: "myposts"
		}
	},
	extendModel: function(Model) {},
    ...

谢谢大家。

1 个答案:

答案 0 :(得分:0)

我认为对View的定义更清晰。在我看来,Alloy带来的最大优点是能够更清晰地将您的视图与驱动应用程序的逻辑分开。您的逻辑也被简化了(在大多数情况下!),因为您需要做的就是将数据添加到集合中,Alloy处理显示。

替代你如何做到这一点:

_.each(datas, function(data){
 var container = Ti.UI.createView({class: "post_item"}),
   title = Ti.UI.createLabel({
     text: data.title,
     class: "post_label"
   }),
   exp = Ti.UI.createLabel({class: "exp"});

   container.add(title);
   container.add(exp);
   $.posts_view.add(container);
});

我已经完成了两种方式,即使使用合金,有时也需要这样做,因为Titanium中实现了Backbone的限制 - 但我想如果你可以包含重复的UI组件标记,它更容易阅读和维护。