0

リリース モードでバンドルを使用すると、次のエラーが発生します。

TypeError: f が null です

デバッグ モードで実行している場合、JS コードに問題はありません。しかし、何らかの理由で、ファイルが実際にバンドルされるとエラーが発生します。次のバンドルを定義しました。

        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/Common/jquery/jquery-{version}.js", 
                    "~/Scripts/Common/jquery/jquery-ui-{version}.js",
                    "~/Scripts/Common/jquery/jquery.labelify.js"));

        bundles.Add(new ScriptBundle("~/bundles/login").Include(
            "~/Scripts/Common/knockout/knockout-2.1.0.js",
            "~/Scripts/Common/knockout/json2.js",
           "~/Scripts/Common/knockout/knockout.validation.min.js",
           "~/Scripts/Common/knockout/KnockoutValidationConfiguration.js",
           "~/Scripts/App/Common/LoginViewModel.js"
           ));

そして、ページのヘッダー内にバンドルをレンダリングしています。ファイルの一番下にLogin.cshtmlは、次のコードがあります。

<script type="text/javascript">
    $(function () {
        var context = new LoginViewModel();
        ko.applyBindings(context, document.getElementById('login_form'));
    });
</script>

コメントアウトすると、エラーが発生しなくなりました。

これが使用されているライブラリまたはライブラリの 1 つが原因であるかどうかはLoginViewModelわかりません。とにかく、ここにLoginViewModelコードがあります:

function LoginViewModel() {
    var self = this;

    self.Username = ko.observable().extend({ required: { message: "Nom d'utilisateur est obligatoire" } });
    self.Password = ko.observable().extend({ required: { message: 'Mot de passe est obligatoire' } });
    self.ErrorMessage = ko.observable();
    self.enableButton = ko.computed(function () {
        var errors = ko.utils.unwrapObservable(ko.validation.group(self));
        return (errors.length == 0);
    });

    self.onLogin = function () {
        var credentials = ko.toJSON({
            Username: self.Username(),
            Password: self.Password()
        });
        $.ajax({
            url: "/Account/Login",
            type: "post",
            contentType: 'application/json',
            data: credentials,
            success: function (data) {
                if (data && data.result == "success") {
                    self.ErrorMessage("");
                    window.location = data.targetUrl;
                }
                else if (data && data.result == "failure") {
                    self.ErrorMessage(data.errorMessage);
                }
            }
        });
    }
};

何かご意見は?どうすればそれをデバッグできますか? また、リリース モードでのみ発生するのはなぜですか?

4

1 に答える 1

0

を使用しないでください。"~/Scripts/Common/knockout/knockout.validation.min.js"代わりに開発ファイルを使用してください: "~/Scripts/Common/knockout/knockout.validation.js".

于 2012-12-14T11:16:17.467 に答える