Javascript 使用模块模式的knockoutjs不工作
我正在尝试使用模块模式创建简单的淘汰示例Javascript 使用模块模式的knockoutjs不工作,javascript,knockout.js,module-pattern,Javascript,Knockout.js,Module Pattern,我正在尝试使用模块模式创建简单的淘汰示例 var login = {}; //login namespace //Constructor login.UserData = function () { var self = this; self.UserName = ko.observable(""); self.Password = ko.observable(""); }; //View-Model login.UserVM = function () { t
var login = {}; //login namespace
//Constructor
login.UserData = function () {
var self = this;
self.UserName = ko.observable("");
self.Password = ko.observable("");
};
//View-Model
login.UserVM = function () {
this.userdata = new login.UserData(),
this.apiUrl = 'http://localhost:9090/',
this.authenticate = function () {
var data = JSON.parse(ko.toJSON(this.userdata));
var service = apiUrl + '/api/Cryptography/Encrypt';
DBconnection.fetchdata('POST', service, JSON.stringify(data.Password), response, function () { console.log('Cannot fetch data') }, null, true);
function response(res) {
console.log(res)
}
}
return {
authenticate: this.authenticate
}
}();
$(function () {
ko.applyBindings(login.UserVM); /* Apply the Knockout Bindings */
});
HTML代码:
<form id="loginform" name="loginForm" method="POST">
<div id="form-root">
<div>
<label class="form-label">User Name:</label>
<input type="text" id="txtFirstName" name="txtFirstName" data-bind="value:login.UserData.UserName" />
</div>
<div>
<label class="form-label">Password:</label>
<input type="text" id="txtLastName" name="txtLastName" data-bind="value:login.UserData.Password" />
</div>
<div>
<input type="button" id="btnSubmit" value="Submit" data-bind="click: authenticate" />
</div>
</div>
</form>
用户名:
密码:
问题是,单击submit时,我无法在viewmodel中获取userdata。它返回的是未定义的,登录对象保留了textbox的更改值,但单击后返回的是黑色值。
请让我知道
您还可以让我知道如何在同一代码中实现定义模块模式。您从
登录返回的对象。UserVM
只有身份验证
属性,没有用户数据
或apiUrl
属性。因此,与其使用来创建对象,不如将login.UserVM
设置为类似于login.UserData
的构造函数。然后使用创建viewModel对象。现在,viewModel将具有userdata
和apirl
属性(从函数中删除return
)
此外,还需要将HTML绑定更改为:data bind=“value:userdata.UserName”
。这将在绑定的viewModel
var login={}//登录名称空间
//建造师
login.UserData=函数(){
var self=这个;
self.UserName=ko.observable(“”);
self.Password=ko.observable(“”);
};
//视图模型
login.UserVM=函数(){
this.userdata=new login.userdata(),
这个.apiUrl=http://localhost:9090/',
this.authenticate=函数(){
var data=JSON.parse(ko.toJSON(this.userdata));
console.log(数据)
//var service=this.apirl+'/api/Cryptography/Encrypt';
//DBconnection.fetchdata('POST',service,JSON.stringify(data.Password),response,function(){console.log('Cannot fetch data')},null,true);
功能响应(res){
console.log(res)
}
}
}; // 从这里删除()命令
ko.applyBindings(new login.UserVM());/*应用敲除绑定*/
用户名:
密码:
应该是ko.applyBindings(new login.UserVM())
@adiga我一直在引用这个,UserVM已经在执行了。对不起,我不知道这是一个iife如何在这里使用确定的模块模式?@abhishek抱歉,我不明白“我如何才能返回值”是什么意思。(此外,我还不知道有什么明确的模块模式可以帮助实现这一点)