JavaScriptを使用してElectronを使用していて、SQLite dbにアクセスしようとしています。 dbの出力は国のリストです。ターゲットはdiv内の単純なulです。このアクションは、ページ上のボタンにアタッチされたonclickイベントによって呼び出されます。SQLite dbにアクセスするJavaScript関数
ここが問題です。技術的に言えば、私はdbにアクセスできます。しかし、データレイヤー(data.js)には、dbファイルから配列を取り込む作業だけを行う2つのオプションがあります。それぞれにあるconsole.log()はデバッグ用です。
オプション1では、return要素は、長さが23で完全に配列された配列を返します(オプション1のイメージを参照)。戻り値要素をdb.all関数から移動すると、空の配列は上に戻りますが、長さは0です(オプション2イメージを参照)。私は最初の選択肢は配列の見方ですが、配列がdb.all関数内に含まれているため、data.jsのgetLocations()に対して何も返しません。その後、model.jsとview.js(以下のコード)の配列は未定義のままです。
オプション2を使用すると、配列はデータ、モデル、ビューなどの行に挿入されますが、「上に空」のため、すべての配列の長さは0のままです。このように、配列の長さが最終的に0で正しくないため、配列を繰り返し処理すると失敗します。
データをjaの配列にハードコードすると、すべて正常に動作し、ページに書き込む国のリスト。 DBファイルからデータを取得することができますが、その必要がありますが、上記の問題が発生するようです。ですから、data.jsがどのように配列を返すのかは本当にすべてです。
正しく配列を取得して正しく処理できるようにするための提案がありますので、それらを繰り返し処理してページに書き込むことができますか?
あなたのお役に立てれます!
Data.jsオプション1:
function getLocations() {
var sqlite3 = require('sqlite3').verbose();
var file = 'db/locations.sqlite3';
var db = new sqlite3.Database(file);
var larray = [];
db.all('SELECT * FROM Country', function(err, rows) {
rows.forEach(function(row) {
larray.push(row.CountryName);
})
console.log(larray);
return larray;
});
}
Data.jsオプション2:
function getLocations() {
var sqlite3 = require('sqlite3').verbose();
var file = 'db/locations.sqlite3';
var db = new sqlite3.Database(file);
var larray = [];
db.all('SELECT * FROM Country', function(err, rows) {
rows.forEach(function(row) {
larray.push(row.CountryName);
})
});
console.log(larray);
return larray;
}
model.js:
function Locations() {
//Pull location values from data
var viewLoc = getLocations();
return viewLoc;
}
view.js:
function viewLocation() {
var viewLoc = Locations();
var container = document.getElementById('wrapper');
for (var i=0; i < viewLoc.length; i++) {
container.insertAdjacentHTML('beforeend', '<li>' + viewLoc[i]);
}
};
ありがとう、サミュエル。進行ですが、まだエラーがあります。上記を実装すると、 "TypeError:model.jsから未定義のプロパティ 'length'を読み取ることができません。それは私には、長さはまだ0として来ていることを示唆しています、はい? viewLocation()に関して、私はLocation()に間違ったコードを貼り付けました。元のメッセージは、私が実際に持っているものに修正されました。テストのために、Locations()で提供したコードを使用し、ページボタンから呼び出しました。しかし、私が言及したエラーの考え方と、上記の修正されたコードで全体をどのように実装するかについては、感謝します。 – Steve
@スティーブ - それは私の間違いです。 'getLocations'に渡したコールバック関数にパラメータがありませんでした。私たちは価値を呼び戻すことによって正しいことをしましたが、反対側でそれを検索することを忘れました。私は解決策を更新しました。お試しください –
よろしく!それで、それは幻想的に動作します。どうもありがとうございます!しかし、上記で編集したように、model.jsとview.jsの間にコードを分けて、どのように実装すればよいでしょうか?私は確かに2つを1つにまとめることができましたが、既に成功していますが、私はMVCモデルを維持しようとしています。私はあなたの助けに感謝します!! – Steve