1

リモートからデータを取得し、モデルとコレクションを作成しようとしています。アプリの各部分 (コントローラー、ビュー、モデル) を次に示します。チタンでモデルを使用することはデータベースに保存するようなものであることを本当に理解していれば、すべてのデータを取得した後、インターネット接続がなくてもデータが保持されます。以下のコードはうまく機能しますが、接続が失われた後にデータが表示されないようです。そのため、従来の方法を使用する代わりにチタンでモデルを使用する利点は何ですか? xhr から取得してデータを表示しますか? 2-データを取得してモデルに保存した後の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) {},
    ...

皆さん、ありがとうございました。

4

1 に答える 1

0

私の意見では、ビューのより明確な定義が利点です。私の意見では、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 コンポーネントをマークアップに含めることができれば、簡単だと思います。読んで維持する。

于 2016-06-13T17:39:41.097 に答える