插入后无法操纵车把模板

时间:2014-07-29 20:09:45

标签: jquery handlebars.js

这可能是一个noob问题,但是:

我构建了一个测验,然后决定用把手模板加载我的所有问题,问题是在模板插入到位后,我无法用jquery或其他任何东西操纵dom。这是我的Handlebars功能:

mQ.loadQuestion = function () {
    "use strict";
    Handlebars.registerHelper("fill", function (data, options) {
        return options.fn(data[mQ.counter]);
    });
    $('#questions').remove();
    $('#answersFrame').remove();
    var templateScript = $('#fillQuestions').html(),
        theTemplate = Handlebars.compile(templateScript);
    $.getJSON("quiz.json", function (quiz) {
    $('#next').before(theTemplate(quiz));
    });
};

好吧我用这个函数改变了问题,问题变化很好,测验工作正常,但是在插入新的html模板之后,好像它的所有类和id都消失了,例如在我调用了把手功能之后并尝试操纵dom,没有任何反应。例如:

mQ.loadQuestion();
    $('.choices').show('slow');

这里的“选项”是该html模板中的一个类名,但是在我调用Handlebars函数之后,我再也无法选择和操作新加载的html,即如果选择的显示没有,我就无法慢慢显示它们,或者如果我想选择一个输入无线电,​​我不能这样做,就好像dom在加载模板后停止工作。例如,如果模板加载空单选按钮,并且我想在模板加载后选择其中一个,我就不能这样做。希望我明白我的问题。谢谢。

1 个答案:

答案 0 :(得分:0)

在DOM中实现的一个,车把模板HTML被视为与任何其他HTML一样,并且是可编辑的。

如果没有例子,很难得到准确的答案。但是,您的模板是在getJSON调用之后注入的。这是一个AJAX调用(异步),所以如果你立即查​​询" .choices",它就不会在DOM中找到它,因为AJAX调用还没有完成并且Handlebars模板还没有被注入。尝试将fadeIn调用放在AJAX回调中,例如:

mQ.loadQuestion = function () {
    "use strict";
    Handlebars.registerHelper("fill", function (data, options) {
        return options.fn(data[mQ.counter]);
    });
    $('#questions').remove();
    $('#answersFrame').remove();
    var templateScript = $('#fillQuestions').html(),
        theTemplate = Handlebars.compile(templateScript);
    $.getJSON("quiz.json", function (quiz) {
        //JSON Callback. Will call this function and the run the code
        //Below once the JSON is available.
        $('#next').before(theTemplate(quiz));
        $('.choices').show('slow');
    });
};