使用 Handlebars 模板编译 JSON 内容的函数不起作用(语法错误?)

A function that compiles the JSON content with Handlebars templates is not working (syntax error?)

有一个网页使用 Handlebars 填充了 JSON 文件的内容(非常感谢 user6709129 对这项技术的详细解释:).

所以我有:

contentProcessing.js:

function sendGet(callback) {
    /* create an AJAX request using XMLHttpRequest*/
    var xhr = new XMLHttpRequest();
    /*reference json url taken from: http://www.jsontest.com/*/

    /* Specify the type of request by using XMLHttpRequest "open", 
       here 'GET'(argument one) refers to request type
       "http://date.jsontest.com/" (argument two) refers to JSON file location*/
    xhr.open('GET', "http://date.jsontest.com/");

    /*Using onload event handler you can check status of your request*/
    xhr.onload = function () {
        if (xhr.status === 200) {
            callback(JSON.parse(xhr.responseText));
        } else {
            alert(xhr.statusText);
        }
    };

    /*Using onerror event handler you can check error state, if your request failed to get the data*/
    xhr.onerror = function () {
        alert("Network Error");
    };

    /*send the request to server*/
    xhr.send();
}

//For template-1
var dateTemplate = document.getElementById("date-template").innerHTML;
var template = Handlebars.compile(dateTemplate);

sendGet(function (response) {
    document.getElementById('testData').innerHTML += template(response);
})

效果很好!

现在我想将 Javascript 代码包装在一个使用三个变量的函数中(我们称之为 contentPrepare):

  1. JSON 文件的路径
  2. Handlebars 模板的 ID
  3. Div 放置内容的id

然后我想在另一个 Javascript 文件中使用这个函数 - addContent.js,它会用不同的变量多次使用这个函数,并且因此用内容填充网站。

为什么在我的测试示例中不起作用?

var jsonDir = "json/test.json";
var templId = "date-template";
var finId = 'testData';

function contentPrepare (jsonDir, templId, finId){
function sendGet(callback) {
    /* create an AJAX request using XMLHttpRequest*/
    var xhr = new XMLHttpRequest();
    /*reference json url taken from: http://www.jsontest.com/*/

    /* Specify the type of request by using XMLHttpRequest "open", 
       here 'GET'(argument one) refers to request type
       "http://date.jsontest.com/" (argument two) refers to JSON file location*/
    xhr.open('GET', jsonDir);

    /*Using onload event handler you can check status of your request*/
    xhr.onload = function () {
        if (xhr.status === 200) {
            callback(JSON.parse(xhr.responseText));
        } else {
            alert(xhr.statusText);
        }
    };

    /*Using onerror event handler you can check error state, if your request failed to get the data*/
    xhr.onerror = function () {
        alert("Network Error");
    };

    /*send the request to server*/
    xhr.send();
}

//For template-1
var dateTemplate = document.getElementById(templId).innerHTML;
var template = Handlebars.compile(dateTemplate);

sendGet(function (response) {
    document.getElementById(finId).innerHTML += template(response);
})
}

P.S.
最终,contentProcessing.jsaddContent.js 将作为一个 commonJS 模块连接并编译成单个 Javascript使用 Browserify 的文件。

将所有逻辑包装到一个函数中后 - 您仍然应该调用它(这就是拥有函数的全部目的)

调用可能类似于

var jsonDir = "json/test.json";
var templId = "date-template";
var finId = 'testData';

contentPrepare(jsonDir, templId, finId);