2016-08-29 181 views
0

我需要一些小的帮助。我无法获得一个数组(larray3),其中有两个其他数组对象(larray1和larray2),它们都将data.js传递到随后的model.js和view.js中。 Data.js正确地构建了多维数组,但是在model.js/view.js中收到结果时,我只收到larray1的结果。因为只有第一个值才能通过,所以我不能分辨larray1和larray2是否真的经过了。有人可以告诉我,我应该如何改变我的syntax.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

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

view.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

在data.js您发送两个参数给done回调:

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

done功能是p在model.js称职通过:

return getCountries(done); 

done从view.js传入:

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

所以这是这个匿名函数(function(results) {...}),被称作data.js.但请注意,这个函数只有一个参数,所以你对data.js发送的第二个参数不做任何事情。 result获得larray3[0]的值,但larray3[1]未捕获到任何位置。

你可以用不同的方式解决这个问题。就我个人而言,我认为两个阵列的设计从一开始就是错误的。我不会将属于成对(名称和代码)的数据分成两个不同的数组。

而是创建一个对象数组,并通过围绕单一阵列:

在data.js:

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

在view.js:

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

侧面说明:分配纯文本时,.textContent优于.innerHTML

+0

谢谢。我尝试过一些类似于关键值配对的尝试,但我知道我没有正确实施。这很好。我也会考虑.textcontent。非常感谢您的帮助! – Steve