2016-08-29 17 views
0

私は少し助けが必要です。私は配列(larray3)に2つの他の配列オブジェクト(larray1とlarray2)を取り込み、data.jsから後続のmodel.jsとview.jsに両方を渡すのに問題があります。 Data.jsは多次元配列を正しく構築しますが、結果がmodel.js/view.jsで受信されたときには、larray1の結果のみを受け取ります。最初の値だけが来るので、larray1とlarray2の両方が実際に通過しているかどうかはわかりません。誰かが、model.jsまたはview.jsのどちらの構文を変更して両方の配列値にアクセスするか、それ以外に何が変更できるか教えてください。前もって感謝します。JavaScriptの多次元配列から配列の値を取得する

data.js

function getCountries(done) { 
var sqlite3 = require('sqlite3').verbose(); 
var file = 'db/locations.sqlite3'; 
var db = new sqlite3.Database(file); 
var larray1 = []; 
var larray2 = []; 
var larray3 = []; 

db.all('SELECT * FROM Country', function(err, rows) { 
    // This code only gets called when the database returns with a response. 
    rows.forEach(function(row) { 
     larray1.push(row.CountryName); 
     larray2.push(row.CountryCode); 
    }) 
larray3.push(larray1); 
larray3.push(larray2); 
return done(larray3[0], larray3[1]); 
}); 
db.close(); 
} 

model.jsあなたはdoneコールバックに二つの引数を送信data.jsで

function viewCountries() { 

var viewCou = Countries(function(results) { 
    // Code only gets triggered when Countries() calls return done(...); 
    var container = document.getElementById('country-select'); 
    var fragment = document.createDocumentFragment(); 

    results.forEach(function(loc, index) { 
     var opt = document.createElement('option'); 
     opt.innerHTML = loc; 
     opt.value = loc; 
     fragment.appendChild(opt); 
    }); 
    container.appendChild(fragment); 
}) 
} 

答えて

1

function Countries(done) { 
//Pull location values from data 
return getCountries(done); 
} 

view.js:

return done(larray3[0], larray3[1]); 

このdone機能はpですあなたのmodel.jsに貫通assed:view.jsから渡され

return getCountries(done); 

そしてそれdone

Countries(function(results) { // ... 

をだから、data.js.で呼び出され、この匿名関数(function(results) {...})がありますしかし、この関数には1つのパラメータしかないので、data.jsが送信する2番目の引数では何もしません。 resultlarray3[0]の値を取得しますが、larray3[1]はどこにもキャプチャされません。

これはさまざまな方法で解決できます。個人的には、2つの配列を持つデザインは最初から間違っていると思います。私は、ペア(名前とコード)に属するデータを2つの異なる配列に分けることはしません。代わり

オブジェクトの配列を作成し、その周辺その単一のアレイ渡し:data.jsで

:view.jsで

rows.forEach(function(row) { 
    larray1.push({ 
     name: row.CountryName, 
     code: row.CountryCode 
    }); 
}) 
return done(larray1); 

opt.textContent = loc.name; 
    opt.value = loc.code; 

サイド注:平文を割り当てるときはが.innerHTMLよりも優先されます。

+0

ありがとうございます。私はキー値のペアリングに似た何かを試みましたが、私は正しい実装をしていないことを知っています。これはうまくいった。 .textcontentについても検討します。あなたは助けてくれてありがとう! – Steve

関連する問題