【问题标题】:cannot manipulate a handlebars template after I insert it插入后无法操作车把模板
【发布时间】:2014-07-29 20:09:44
【问题描述】:

这可能是一个菜鸟问题,但是:

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

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都消失了,例如在我调用handlebars函数之后并尝试操纵 dom,没有任何反应。例如:

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

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

【问题讨论】:

    标签: jquery handlebars.js


    【解决方案1】:

    一个在 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');
        });
    };
    

    【讨论】:

    • 谢谢你这个工作,但是,它也可以工作,例如,如果我在尝试编辑任何东西之前发出警报,我想那时有时间完成 ajax 调用,但我的问题是,你说ajaxs调用没有完成,但是模板还是正确的使用了json对象,并且把正确的key放到了正确的地方,在ajax调用没有完成的情况下怎么能做到呢?
    • 警报暂停代码,并为 AJAX 调用留出时间完成。模板有效,因为模板在 getJSON 回调中呈现,因此此时数据可用。请记住,AJAX 调用就像加载另一个页面;网页不会立即加载,AJAX 调用也不会。 Javascript 在继续之前不会等待 AJAX 调用完成,这就是您必须使用回调的原因。
    猜你喜欢
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    相关资源
    最近更新 更多