javascript - 如何在用户确认时更新 knockoutjs View 模型?

标签 javascript knockout.js

我有一个就地编辑部分,我想在更新 knockoutjs 模型之前向其中添加更改确认。

这是 jsFiddle example我现在所拥有的。 这是我希望它执行的操作。

  1. 用户点击可编辑部分
  2. 出现文本框,旁边有保存/取消按钮。
  3. 如果用户进行更改并点击保存, View 模型会更新
  4. 如果用户进行了更改,但决定保留原始内容,则他们单击取消, View 模型保持不变,文本框被隐藏,可编辑元素保持不变。

取消点击的行为是我不确定如何实现的。谁能建议如何做到这一点?

最佳答案

我更喜欢为此使用自定义绑定(bind)处理程序。 示例 http://jsfiddle.net/7v6Dx/10/

HTML

<div>
    <span class="editField">
        <span data-bind="text: Address1">Click here to edit</span>
        <input type="text" data-bind="clickEditor: Address1">
    </span>
</div>​

JavaScript

ko.bindingHandlers.clickEditor = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {        
        var $element = $(element).hide();
        var $text = $element.prev();
        var $buttons = $("<span class='editConfirm'> \
                    <button class='saveEdit' type='button'>Save</button> \
                    <button class='cancelEdit' type='button'>Cancel</button> \
                </span>").hide().insertAfter($element);
        var $editElements = $buttons.add($element);

        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
            $buttons.remove();
        });

        var _toggle = function(edit) {
            $text[edit? 'hide' : 'show']();
            $editElements[edit? 'show' : 'hide']();
        }

        $text.click(function(e) {
            _toggle(true);
        });

        $editElements.find('.saveEdit').click(function() {
            _toggle(false);
            valueAccessor()($element.val());
        });

        $editElements.find('.cancelEdit').click(function() {
            _toggle(false);
            $(element).val(ko.utils.unwrapObservable(valueAccessor()));
         });
    }
    , update: function (element, valueAccessor) {
        $(element).val(ko.utils.unwrapObservable(valueAccessor()));
    }
};

$(document).ready(function() {
    var helpText = "Click here to edit";

    function appViewModel() {
        this.Address1 = ko.observable(helpText);
    }
    ko.applyBindings(appViewModel());

});​

关于javascript - 如何在用户确认时更新 knockoutjs View 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9950018/

相关文章:

javascript - 使用 momentjs 将系统日期转换为 ISO 格式

javascript - 捕获 SVG 并重新缩放为微型

javascript - 如何处理 knockout.js 中的本地化?

javascript - Chrome 突然停止接受 insertRule()

javascript - 在 Javascript 中解析 JSON 响应以获取键/值对

javascript - 如何在回调中访问正确的“this”?

knockout.js - KnockoutJS - 在应用绑定(bind)后更新可观察值

javascript - 始终需要加载插件

javascript - 迭代 json 对象

javascript - 替换 observableArray 中的项目