javascript - 具有异步数据的 handlebar.js 助手

标签 javascript handlebars.js promise

我想知道如何使用同步数据和 Handlebars 助手。我想将 cms 消息加载到单页应用程序,我尝试了以下方法但无法实现。

请看下面的代码。

    function loadCmsMessage(key) {

    var cms = {
            "msg.001": "Hello {0} {1}"
        };

        var deferred = $.Deferred();
        setTimeout(function () {
            var msg = cms[key];
            deferred.resolve(msg);
        }, 1000);

        return deferred.promise();
    }

Handlebars.registerHelper('cms', function (key, arr) {

    var promise = loadCmsMessage(key);

    promise.done(function (str) {
        str = Handlebars.Utils.escapeExpression(str);

        if ($.isArray(arr)) {
            $.each(arr, function (i) {
                var safeStr = Handlebars.Utils.escapeExpression(arr[i]);
                str = str.replace("{" + i + "}", safeStr);
            });
        }

        var result = '<span class="cms-data">' + str + '</span>';

        return new Handlebars.SafeString(result);
    });

});

$(document).ready(function () {
    var template = Handlebars.compile($("#myTemplate").html());
    $("#wrap").html(template({
        "person": ['Jane', 'Fonda']
    }));
});

最佳答案

你不能。 return 语句位于 Promise 的内部函数中。 Handlebars 助手不允许异步。

关于javascript - 具有异步数据的 handlebar.js 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20716240/

相关文章:

javascript - 编写 Google Cloud Functions 时是否应该在 'finally' block 中使用 response.send() ?

javascript - 如何显示来自旧组件的数据

javascript - Animate scrolltop 不适用于 chrome 但适用于 firefox

ember.js - 使用 ember-cli 阻止助手

webpack - 错误 : Child compilation failed: Cannot find module 'handlebars' 中的错误

javascript - 从 promise 创建高地溪流时如何处理 promise 拒绝?

javascript - svg :g is added时如何在div中添加滚动条

javascript - 如何停止渲染阻塞 Javascript 和 CSS?

javascript - Ember 找不到模板

javascript - 使用 $interval 使用 Angular 还是 promise 在 api 完成时运行代码?