I just tried to use underscore.js
for loading the template, but when i click on login button and fire a request to server then after retrieval of response when i try to remove one template and show other, after that document.ready() is called again resulting in re-rendering of login page.
I am confused what is causing this to happen, any help is appreciated.
Here is javscript code:
$(document).ready(function(){
/* Login-Workflow-start*/
var loginTemplate = _.template($("#login-template").html());
$("#main-content").html(loginTemplate);
$("#btn_login").on('click', function(){
// when login is clicked.
var formData = $("#form_login").serialize()
console.log(formData);
var req= $.ajax({
type: "POST",
url: "http://localhost:3002/login",
data: {
"username": $('[name="username"]').val(),
"password": $('[name="password"]').val()
},
success: function(responseData,textStatus,jqXhr){
console.log("Response: " + responseData);
// show welcome page now
var welcomeTemplate = _.template($("#welcome-template").html());
$("#main-content").html(welcomeTemplate);
},
error: function(){
console.log("Error!!!");
}
});
});
/* Login-Workflow-end*/
});
update:
welcome-template looks like following:
<script type="text/template" id="welcome-template">
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav navbar-right">
<li><a href="#">Dashboard</a></li>
<li><a href="#">Settings</a></li>
<li><a href="#">Profile</a></li>
<li><a href="#">Help</a></li>
</ul>
<form class="navbar-form navbar-right">
<input type="text" class="form-control" placeholder="Search...">
</form>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col-sm-3 col-md-2 sidebar">
<ul class="nav nav-sidebar">
<li class="active"><a href="#">Overview</a></li>
<li><a href="#">Reports</a></li>
<li><a href="#">Analytics</a></li>
<li><a href="#">Export</a></li>
</ul>
<ul class="nav nav-sidebar">
<li><a href="">Nav item</a></li>
<li><a href="">Nav item again</a></li>
<li><a href="">One more nav</a></li>
<li><a href="">Another nav item</a></li>
<li><a href="">More navigation</a></li>
</ul>
<ul class="nav nav-sidebar">
<li><a href="">Nav item again</a></li>
<li><a href="">One more nav</a></li>
<li><a href="">Another nav item</a></li>
</ul>
</div>
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<h1 class="page-header">Dashboard</h1>
</div>
</div>
</div>
</script>
Login template looks like following:
<script type="text/template" id="login-template">
<ul class="nav nav-tabs" role="tablist">
<li class="active"><a href="#login" role="tab" data-toggle="tab">Login</a></li>
<li><a href="#register" role="tab" data-toggle="tab">Register</a></li>
<li><a href="#reset-password" role="tab" data-toggle="tab">Reset Password</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div class="tab-pane active" id="login">
<form role="form" id="form_login">
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">Username</span>
<input type="text" class="form-control" name="username" placeholder="Enter Username here" />
</div>
</div>
<div class="form-group">
<div class="input-group">
<span class="input-group-addon">Password</span>
<input type="text" class="form-control" name="password" placeholder="Enter Password here" />
</div>
</div>
<button class="btn btn-wide btn-primary mrm" id="btn_login">Login</button>
</form>
</div>
<div class="tab-pane" id="register"> Register page loading..</div>
<div class="tab-pane" id="reset-password">Reset Password page Loading</div>
</div>
</div>
</script>
UPDATE2 In case some one want to see the entire/part(s) code for analysis then please visit at this repo on bitbucket
Got the solution,
Culprit was form tag, upon clicking the submit button, form tag was firing a request too of its own, this was leading to document.ready getting re-called.
Solution: convert form
tag to div
, since we are handling the request creation by ourselves.