2016-11-16 8 views
0

私のアプリケーションには、sqlite dbからデータをフェッチしてListViewのonNavigatingToページに表示する予定のスコアボードページがありますが、期待通りに機能しません。nativescriptアプリケーションでsqlite dbデータを表示する際に問題が発生する

結果を表示するためのXMLページ:

<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded" navigatingTo="onNavigatingTo"> 

<ActionBar title="Scoreboard"> 
    <NavigationButton text="Back" android.systemIcon="ic_menu_back" tap="homeTap"/> 
</ActionBar> 

<StackLayout orientation="vertical">   
    <Label text="Your Performance Sheet"></Label> 
    <ListView items= "{{results}}" > 
     <ListView.itemTemplate> 
      <Label text="{{testname}}"/> 
      <Label text="{{score}}"/> 
      <Label text="{{percent}}"/> 
     </ListView.itemTemplate> 
    </ListView> 
</StackLayout> 

</Page>   

スコアボード・ビューモデル:

var Observable = require("data/observable").Observable; 
var ObservableArray = require("data/observable-array").ObservableArray; 
var Sqlite = require("nativescript-sqlite"); 

function scoreViewModel (database) { 

var viewModel = new Observable(); 

viewModel.results = new ObservableArray([]); 

viewModel.select = function() { 
    this.results = new ObservableArray([]); 
    database.all("SELECT * FROM scores").then(rows => { 

    for (var row in rows) {   
     this.results.push(rows[row]); 
    } 
    }, error => { 
     console.log("SELECT ERROR", error); 
    }) 
} 
viewModel.select(); 

return viewModel;  
} 

exports.scoreViewModel = scoreViewModel; 

私はスコアテーブルからすべてのデータを選択し、viewModel.resultsアレイにプッシュしていますすでにビューにバインドされています。

scoreboard.jsは:

var observable = require("data/observable"); 
var scoreViewModel = require("./scoreboard-view-model").scoreViewModel; 
var page; 
var Sqlite = require("nativescript-sqlite"); 

exports.onNavigatingTo = function (args) { 
page = args.object; 


(new Sqlite("scoreboard.db")).then(db => { 
    db.execSQL("CREATE TABLE IF NOT EXISTS scores (id INTEGER PRIMARY KEY AUTOINCREMENT, testname TEXT, score TEXT, percent TEXT)") 
    .then(id => { 
     page.bindingContext = scoreViewModel(db);   
    }, error => { 
     console.log(error) 
    }); 
}, error => { 
    console.log(error); 
}); 
} 

誰かが私がリストビューに表示するデータを得るのを助けるしてください。

+0

ちょっとダミー、データがデータベースから正しく戻ってきたことを確認しましたか?それが問題なのか、これが拘束力のある問題なのか疑問に思うだけです。一目でここにあるものはすべて妥当に見えます。 –

+0

はいTJ、データがデータベースから送られてきたので、コンソールにログして確認しました。それは今働いている、それはビューモデルを編集して表示する。 –

答えて

1

私はそれが正確にviewModel.Select機能で、スコアボード・ビューmodel.jsファイルを編集することで動作しました:

viewModel.select = function() { 
    //the line below was changed to this... 
    //testname, score, and percent are column names in the scores table 
    database.all("SELECT testname, score, percent FROM scores").then(rows => { 

    for (var row in rows) { 
     //the line below was changed too...  
     viewModel.results.push({testname: rows[row][0], score: rows[row][1], percent: rows[row][2]}); 
    }, error => { 
     console.log("SELECT ERROR", error); 
    }) 
} 

完了。今は期待どおりに動作します。 TJ Vantollさん、お手伝いをしてくれてありがとう。本当に感謝。

+0

恐ろしい:)うまくいけばうれしい。 –

+0

他の人が恩恵を受けるためにあなたのソリューションをここに残してくれてありがとう。 –

+0

それは私ができることは少なくともです。 –

関連する問題