【问题标题】:Can only have one function in JS moduleJS模块中只能有一个功能
【发布时间】:2020-12-06 20:39:22
【问题描述】:

我找到了this post,了解如何使用 Blazor 编写 cookie(事实证明,这涉及到 JavaScript)。使用帖子中的示例,我制作了自己的版本,具有 WriteRead 功能。所以它看起来像这样:

<script>
    window.blazorExtensions = {

        WriteCookie: function (name, value, days) {

            var expires;

            if (days) {
                var date = new Date();
                date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
                expires = "; expires=" + date.toGMTString();
            }
            else {
                expires = "";
            }

            document.cookie = name + "=" + value + expires + "; path=/";
        };

        ReadCookie: function (cname) {
            var name = cname + "=";
            var decodedCookie = decodeURIComponent(document.cookie);
            var ca = decodedCookie.split(';');
            for(var i = 0; i <ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
                }
            }
            return "";
        }
    }
</script>

唯一的问题是......它不起作用:-(

如果我只有WriteCookie 方法,它就可以工作。如果我只有ReadCookie 方法,它就可以工作。但如果我有两者,它就不起作用了。

从外观上看,window 部分是一个模块,但我可能是错的。然而,这正是 VS Code 在工具提示中所说的:

谁能给我解释一下,为什么这不起作用?我尝试了谷歌,但由于我对术语感到困惑,所以很难找到有用的东西。我习惯了 C#,并认为 window.blazorExtension 是某种命名空间。

如果有任何帮助,以下是我调用函数的方式:

public async Task WriteCookeAsync() {
        var test = await JSRuntime.InvokeAsync<object>("blazorExtensions.WriteCookie", "Color", colorCode, 7);
    }

【问题讨论】:

  • 您正在定义对象的成员。这些应该用逗号分隔,但您使用了分号。是这样吗?

标签: javascript c# cookies blazor


【解决方案1】:

没有实际检查你的函数的正确性,我可以看到对象window.blazorExtensions 没有正确定义。您需要做的是将 WriteCookie 函数定义后的分号更改为逗号,因为 JavaScript 对象属性以逗号分隔...

window.blazorExtensions = {
    
    WriteCookie: function (name, value, days) {
        //...
    },

    ReadCookie: function (cname) {
        //...
    },
};

【讨论】:

  • 现在可以使用了,谢谢。一定很喜欢一个角色如何像那样把你踢疯……有没有以这种方式定义函数的方法的名称(例如FunctionName: function(input) {}?我在 JS 教程中找不到任何示例。
  • @JakobBuskSørensen 哈哈,你没看错!不要以为它有一个特定的名字,基本上,它只是在创建一个对象字面量;对象属性可以是任何其他对象,包括函数,在 JavaScrit 中它们本身就是一等对象。如果现在为您解决了这个问题,您能否将此答案标记为正确的解决方案。谢谢。
  • 完成,谢谢!在我接受之前,我只是想了解原因和内容:-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 2020-04-06
  • 2019-05-27
  • 1970-01-01
  • 2021-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多