【问题标题】:Multiple ViewModels Knockout with JQuery使用 JQuery 淘汰多个 ViewModel
【发布时间】:2012-12-17 14:27:03
【问题描述】:

我有这个Fiddle

它在小提琴中完美运行,但是一旦我将所有内容放入 ASP.NET MVC4 应用程序中,第二个 ViewModel 就没有加载! 这通常仅在我将以下脚本标记添加到我的项目时才发生

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

我需要一些 JQuery 函数来加载第二个 ViewModel 还是我做错了什么? ;)

这是我的代码:

<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 即使它必须相同,我也会得到不同的值! 也许这对你有帮助! 请查看我的代码中带有“**”的 cmets 以了解我的意思

【问题讨论】:

  • 当您将其放入 MVC 应用程序并且它无法正常工作时,您在浏览器的 javascript 控制台中看到了什么?有没有错误?
  • 我现在发现了一件小事。也许你现在可以看到我做错了什么
  • 这是旧的,只是好奇,如果你解决了这个问题。
  • 问题解决了,我发现在这里使用 JQuery 是错误的。淘汰赛本身就很好

标签: jquery-mobile asp.net-mvc-4 knockout.js


【解决方案1】:

尝试在就绪事件而不是 pageinit 事件中加载视图模型。

$(document).ready(function () {
    ko.applyBindings(masterViewModel);
});

【讨论】:

  • 这没有帮助!问题是,第二个 ViewModel 被执行了,但似乎 'if' 绑定与 JQery 中断了,这真的很奇怪
  • 我编辑我的问题。也许你可以再看一遍?
  • 如何在实例化时应用startvm viewmodel而不是应用初始时间。
  • 这不是问题...我发现它与 JQuery Mobile 有关,它以某种方式停止更新视图模型我试图找到一个解决方案但是谢谢你的回答
猜你喜欢
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 2017-09-22
  • 1970-01-01
相关资源
最近更新 更多