我正在尝试创建一个模态窗口,用于从用户获取值以发送到服务器。我想用我们当前拥有的值预先填充字段,并在模态窗口出现时使用当前值(本地存储)进行更新。
我遇到的问题是,当我直接将字段链接到observable时,用户将编辑字段,如果它们点击“取消”,则前一个屏幕显示的值将包含更新的值。如果我像“value :()那样绑定它,我会得到一个可以编辑的字符串,但如果用户打开它,编辑该值,关闭它,然后重新打开它......编辑后的更改仍然存在。” p>
有没有人就如何获取表单的更新信息而不必直接链接到observable有任何建议?当我打开这个窗口打电话时,有没有办法刷新这些绑定?
我目前的表格样本如下。
<form>
...
<div class="control-group">
<label class="control-label" >Cellular Fault Time (in Minutes)</label>
<div class="controls">
<input type="text" class="input-small" id="gsmfaultecptime" maxlength="2" onkeypress='return isNumberKey(event)'
data-bind="value: gsmfaulttime()">
</div>
</div>
<div class="control-group">
<label class="control-label" >Cellular IP1</label>
<div class="controls">
<input type="text" readonly class="input-medium" data-bind="value: csip()">
</div>
</div>
...
</form>
答案 0 :(得分:0)
我过去曾使用过两种方法来处理可恢复的数据元素。
拥有专用于每次打开时替换的模态的视图模型。
launchModal: function () {
$('#dialog').dialog('open')
var obs = this.obs;
var dialogViewModel = {
anotherObs: ko.observable(obs()),
accept: function () {
obs(dialogViewModel.anotherObs())
$('#dialog').dialog('close')
},
cancel: function () {
$('#dialog').dialog('close')
}
}
ko.applyBindings(dialogViewModel, $('#dialog')[0])
}
装饰observable以提供修改处理。
self.createSpecialObservable = function () {
var obs = ko.observable("Greetings")
obs.originalValue = undefined;
obs.revert = function () {
if (obs.originalValue) {
obs(obs.originalValue)
obs.originalValue = undefined;
}
}
obs.accept = function(){obs.originalValue = undefined}
obs.subscribe(function (newValue) {
if (!obs.originalValue) {
obs.originalValue = obs();
}
}, null, "beforeChange")
return obs;
}
这两种用法均可用in this example
修改:另请参阅this示例。