【问题标题】:How to change view in Knockout JS如何在 Knockout JS 中更改视图
【发布时间】:2016-03-06 00:12:30
【问题描述】:

我有一个简短的问题。我正在使用 Knockout JS 并拥有此视图和 ViewModel:

var LoginViewModel = function () {
    var self = this;

    self.userName = ko.observable();
    self.userPassword = ko.observable();

    self.signin = function () {
        data = ko.toJSON(self);

        $.ajax({
            url: "/signin",
            type: "post",
            data: ko.toJSON(self),
            contentType: "application/json",
            success: function (data, textStatus, xhr) {
                alert(xhr.status);
                // If status == 200(OK) change view
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert("failure");
            }
        });
    }
}

ko.applyBindings(new LoginViewModel());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<div class="container">
   <div class="col-md-4 col-md-offset-4" data-bind="visible: isVisible">
      <div class="panel panel-default">
         <div class="panel-heading" style="text-align: center;">
            <strong class="">SEHA</strong>
         </div>
         <div class="panel-body">
            <form class="form-horizontal">
               <div class="form-group">
                  <label for="username" class="col-sm-3 control-label">Name</label>
                  <div class="col-sm-9">
                     <input class="form-control" required="" type="text" data-bind="value: userName">
                  </div>
               </div>
               <div class="form-group">
                  <label for="password" class="col-sm-3 control-label">Password</label>
                  <div class="col-sm-9">
                     <input class="form-control" required="" type="password" data-bind="value: userPassword">
                  </div>
               </div>
               <div class="form-group last">
                  <div class="col-sm-offset-3 col-sm-9">
                     <button class="btn btn-success btn-sm" data-bind="click: signin">Sign in</button>
                  </div>
               </div>
            </form>
         </div>
         <div class="panel-footer">
            ~
         </div>
      </div>
   </div>
</div>

如果用户登录,我现在想更改“视图”。我该如何实现? 我还想为下一个视图选择一个新的视图模型。我该怎么做?

这是我使用 javascript/knout 的第一步,请善待。

【问题讨论】:

标签: javascript knockout.js view navigation viewmodel


【解决方案1】:

如果您处理应用程序的服务器部分,您可能希望返回重定向代码 301 并指定要重定向的 URL。

否则,您可以使用 javascript 代码处理此客户端: window.location.replace("./Home.html");

【讨论】:

  • 那我该怎么办?我真的应该只重定向到另一个网站吗?或者我应该在一页上添加多个 div 并更改它们的可见性?当我使用客户端方法时,我会有不同的视图模型吗?那是我分配给页面的吗?抱歉问了这么多问题
  • 这取决于你想做什么 :) 如果你想制作一个单页应用程序,你可能想要替换 div 并更改可见性或各种元素 div。但是,为了安全起见,您应该有一个专用页面而不是隐藏 div,因为您不希望您的内容对未登录的用户可见。如果您想制作一个简单的单页应用程序,您可以在 onSuccess 事件上执行 Ajax 调用以加载要显示的 HTML 内容,并将 id="container" 替换为您的新内容。
猜你喜欢
  • 2017-09-02
  • 2014-09-13
  • 2015-11-01
  • 2016-10-22
  • 1970-01-01
  • 2012-05-24
  • 2014-12-10
  • 2020-05-04
  • 2019-04-15
相关资源
最近更新 更多