敲除js将文本框值传递给viewmodel

Knockout js passing textbox value to viewmodel

我有模型 class 和视图模型,我正在创建模型 class 的实例。

当我在输入标签中输入一些文本时,该值不会进入视图模型,当我单击 "save" 按钮时,我得到一个空数组。

HTML

<div id="UserID">
    <lable>UserName</lable>
    <input type="text" data-bind="value:currentUser().userName" />
    <br />
    <!--<span data-bind="text:firstName" /><br />-->
    <label>MobileNumber</label>
    <input type="text" data-bind="value:currentUser().userMobileNumber" /><br />
    <label>Email</label>
    <input type="text" data-bind="value:currentUser().userEmail" /><br />
    <label>Image</label>
    <input type="text" data-bind="value:currentUser().userImageBase64" /><br />
    <label>Image</label>
    <input type="text" data-bind="value:currentUser().userImageType" /><br />
    <label>DeviceUID</label>
    <input type="text" data-bind="value:currentUser().deviceUId" /><br />
    <input type="button" value="save" data-bind="click:currentUser().saveuserDetail" />
</div>

JS

// Model class///
var userModel = function() {
    self = this;
    self.userName = ko.observable()
    self.userMobileNumber = ko.observable();
    self.userEmail = ko.observable();
    self.userImageBase64 = ko.observable();
    self.userImageType = ko.observable();
    self.deviceUId = ko.observable();
}

//ViewModel//
var userDetails = function() {
    self = this;
    self.currentUser = ko.observable(new userModel());
    //ajax post
    self.saveuserDetail = function() {
        var model = ko.toJSON(currentUser());
        console.log(model);
        jQuery.support.cors = true;
        $.ajax({
            url: baseurl + 'api/xxxx/xxxxx',
            type: 'POST',
            data: model,
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function(data) {}
        });
    }
};

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

您甚至在 <input type="button"/> 元素上将 click 绑定到嵌套 curretUser 视图模型上的 saveuserDetail 函数,而您实际上已经找到了此功能在父 userDetails 视图模型上。

<input type="button" value="save" data-bind="click:curretUser().saveuserDetail" />

要么将此绑定更改为

<input type="button" value="save" data-bind="click:saveuserDetail" />

或将 saveuserDetail 函数重新定位到 curretUser 视图模型。

此外,您应该支持 <input/> 元素的 textInput 绑定而不是 value 绑定。 Here is an explanation 的区别。