2016-08-29 177 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