如何在用户确认时更新knockoutjs视图模型
How to update knockoutjs view model on user confirm?
我有一个就地编辑部分,我想在更新knockoutjs模型之前向其中添加更改确认。
下面是我现在拥有的jsFiddle示例。这是我想要它做的。
- 用户点击可编辑部分
- 文本框出现,旁边有保存/取消按钮
- 如果用户进行了更改并单击"保存",则视图模型将更新
- 如果用户进行了更改,但决定保留原始内容,则单击"取消",视图模型保持不变,texbox被隐藏,可编辑元素保持不变
取消点击的行为是我不确定如何实现的。有人能建议如何做到这一点吗?
我更喜欢使用自定义绑定处理程序。实例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());
});
我想您可能可以使用可写的计算属性来处理此问题。但是,只需要分离属性可能会更容易。一个属性是真实属性,另一个属性对其进行阴影处理。当您打开可编辑部分时,它实际上绑定到阴影值。单击"确定"按钮时,将阴影值复制到实际值。如果单击"取消",则执行相反的操作(将实际值复制到阴影值)。
相关文章:
- KnockoutJS更新行和字段
- 对可观察数组foreach的更新删除了格式化knockoutjs
- Knockoutjs计算未从observableArray更新
- 正在更新Knockoutjs可观察数组项
- 更新knockoutjs中的行项目
- Knockoutjs函数更新模型时应出现异常
- KnockoutJs 更新视图模型可从 Json Web 服务中观察到
- KNockoutJS 与 jQuery 数据表,绑定行未正确更新
- knockoutjs ObservableArrays 和排序函数:UI 未更新
- KnockoutJS arrayFilter 不会更新
- 如何在用户确认时更新knockoutjs视图模型
- KnockoutJS:无法更新选项值
- KnockoutJS-更新数组时表不更新
- Knockoutjs点击并编辑字段不更新可观察
- KnockoutJS数据更新将内部函数写入UI
- KnockoutJS:使用映射将数据更新/插入到viewModel
- 在knockoutjs中计算的可观察性;更改时不更新
- 使用Knockoutjs即时更新后端
- 当dom文本发生更改时,更新knockoutjs-viewmodel
- 更新KnockoutJS关联的observableArray值