1

私はこのフィドルを持っています

フィドルで完全に機能していますが、すべてを ASP.NET MVC4 アプリケーションに入れるとすぐに、2 番目の ViewModel が読み込まれません! これは通常、次のスクリプト タグをプロジェクトに追加した場合のみです。

<script src="../../Scripts/jquery.mobile-1.2.0.js" type="text/javascript"></script>

2 番目の ViewModel をロードするためにいくつかの JQuery 関数が必要ですか、それとも何が間違っていましたか? ;)

これが私のコードです:

<form action="" data-bind=" template:{ 'if': loginVM, data: loginVM }"> 
 //SomeCode
</form>

<form action="" data-bind=" template:{ 'if': startVM, data: startVM}"> 
//Some Code
</form>

<script type="text/javascript">

        var masterViewModel = {

            loginVM: ko.observable(),
            startVM: ko.observable(),
            projektUnterbrechen: ko.observable(),
            logout : ko.observable(),
            projectStartVM: ko.observable()

        };

        var LoginVM = function () {
            var self = this;
            self.mandant = ko.observable();
            self.user = ko.observable();
            self.password = ko.observable();
            self.showDetails = function () {
                if ((self.user() == "Gregor") && (self.password() == "gregrech")) {
                    masterViewModel.loginVM(null);
                    masterViewModel.startVM(new StartVM());
                    **//alert(masterViewModel.startVM()!=null) //==True** 


                }
                else {
                    alert("Username oder Passwort falsch");
                }

            };
        };

        var StartVM = function () {
            self = this;
            **//alert(masterViewModel.startVM()!=null) //==False**
            //Um weiterzumachen muss man eingeloggt sein
            self.favoriten = ko.observableArray([
                {
                    projectName: "Favorit1"
                },
                {
                    projectName: "Favorit2"
                },
                {
                    projectName: "Favorit3"
                }
                ]);
            //Die zuletzt verwendeten Projekte
            self.zuletzt = ko.observableArray([
            {
                lastProjName: "Zuletzt1"
            },
            {
                lastProjName: "Zuletzt2"
            },
            {
                lastProjName: "Zuletzt3"
            }
            ]);
            self.showStart = function (projectName, data, event) {
                masterViewModel.projectStartVM(new ProjectStartVM(projectName));
                masterViewModel.startVM(null);
            };
        };
        masterViewModel.loginVM(new LoginVM());
        $(document).on('pageinit', function () {
            ko.applyBindings(masterViewModel);
        });

</script>

回答ありがとうございます

編集:同じである必要がある場合でも、 masterViewModel.startVM()!= null を比較すると、異なる値が得られることがわかりました! 多分これはあなたを助けるでしょう!コード内の「**」のコメントを見て、私の意味を理解してください

4

1 に答える 1

0

pageinit イベントではなく、ready イベントでビューモデルをロードしてみてください。

$(document).ready(function () {
    ko.applyBindings(masterViewModel);
});
于 2013-01-03T08:37:13.990 に答える