javascript - 单击按钮时映射在 knockout 中不起作用

标签 javascript jquery knockout.js knockout-mapping-plugin

通过单击按钮,映射在 knockout 中不起作用,

我在 knockout 中使用了映射,同时在单击按钮时更改输入文本值未正确更改。 单击加载用户数据按钮后需要更改名称输入文本的值

这是我的代码,

    <div class='sample'>
    <p>Load: <input type="button" value="Load User Data" data-bind="click: loadUserData" /></p>
    <p>Name: <input data-bind='value: firstName' /></p>
    <p>Save: <input type="button" value="Save User Data" data-bind="click: saveUserData" /></p>
</div>
<script>
    $(document).ready(function () {
        var viewModel = {};
        viewModel.firstName = 'Knockout JS';
        viewModel.loadUserData = function () {
            $.getJSON("/data.json", function (data) {
                // update the data in existing ViewModel.
                viewModel.firstName = data.name;
                ko.mapping.fromJS(data, viewModel);

            });
        };
        viewModel.saveUserData = function () {
            // Convert the viewModel into JSON.
            var data_to_send = { userData: ko.toJSON(viewModel) };
            // Send that JOSN data to server.
            $.post("WebService.asmx/updateData", data_to_send, function (data) {
                alert("Your data has been posted to the server!");
            });
        };
        ko.applyBindings(viewModel);
    });
</script>

我有什么错吗?

最佳答案

为了使其更新 UI,您需要使firstName 可观察

然后,当您想要修改可观察值时,您需要将其视为函数并将新值作为参数传递,如下所示 firstName('newValue')

查看链接here获取更多信息和下面的示例:

var masterVM = (function () {
  var self = this;      
  self.firstName = ko.observable("Knockout JS");
  self.loadUserData = function() {
    var currentName = self.firstName();
    self.firstName(currentName + "Updated");
  }
})();

ko.applyBindings(masterVM); 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<p>Load: <input type="button" value="Load User Data" data-bind="click: loadUserData" /></p>
<p>Name: <input data-bind='value: firstName' /></p>

关于javascript - 单击按钮时映射在 knockout 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43385059/

相关文章:

php - 激活/停用选择框选项的 spry 验证

javascript - 在 JavaScript 中对具有 n 个参数的函数进行柯里化(Currying)

javascript - 修复页面高度以随页脚向上滑动

javascript - 在android webview中为本地文件创建脚本标签时出现问题

jquery - 动画从一个列表到另一个列表的过渡

javascript - 在其他函数中使用 var 在 CKeditor 中进行选择

javascript - 带有子集合的 Firestore 查询

javascript - 如何在javascript中使用json将选择列表绑定(bind)到值

jquery - 检测base64编码

javascript - knockout 可观察未渲染到屏幕