MDL - 页面加载时弹出快餐栏

MDL - popup snackbar on page load

我正在使用来自 google 和 jquery 的 material 设计灯。 我似乎无法让 snackbar 在页面加载时显示。我的错误 得到的是

index.cshtml(摘录)

<div id="demo-toast-example" class="mdl-js-snackbar mdl-snackbar mdl-color--accent">
        <div class="mdl-snackbar__text"></div>
        <button class="mdl-snackbar__action" type="button" style="display:none;"></button>
</div>
<script>
    $(function () {
        var ErrorStringValue = '@ViewBag.ErrorText';
        if (ErrorStringValue.length > 0) {
            setTimeout(addSnackbar(ErrorStringValue), 2000);
        }
    });
</script>

scripts.js

function addSnackbar(string) {
    var snackbarContainer = document.querySelector('#demo-toast-example');
    var data = { message: string, timeout: 2000 };
    snackbarContainer.MaterialSnackbar.showSnackbar(data);
}

我遇到的错误是,当加载带有错误文本视图包的页面时,它会立即执行addSnackbar,然后snackbarConatiner.MaterialSnackbar将为空

我曾试图延迟它以便让其他东西有时间加载?但正如您所见,但由于某种原因,它实际上并没有等待延迟结束,然后才执行函数 addSnackbar()

我假设在 document.ready 之后设置了一些 mdl 元素,但是在完成之后如何设置小吃店?

我一直误解了 jquery document.ready 的工作原理。它会在页面完成渲染后执行,但不会等待 js 库完成。在这种情况下,material.js 尚未完成加载。所以我用下面的

替换了 index.cshtml 中的脚本
<script>
        $(window).load(function () {
            var ErrorStringValue = '@ViewBag.ErrorText';
            if (ErrorStringValue.length > 0) {
                addSnackbar(ErrorStringValue);
            }
        });
</script>

这很好用。 Window.load 事件也将在所有库加载完成后触发。