“值”绑定最初将元素的值设置为视图模型中的值,所以不会。但是,您可能可以将“值”绑定的代码复制到您自己的处理程序中,该处理程序最初根据控件上的值设置模型值。下载调试版本 http://cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.debug.js淘汰赛,并寻找ko.bindingHandlers['value'] = {
online 2182. 复制此绑定处理程序声明并将“value”更改为其他内容,然后在 init 末尾添加对 valueUpdate Handler() 的调用:
ko.bindingHandlers['myvalue'] = {
'init': function (element, valueAccessor, allBindingsAccessor) {
// skipping code
valueUpdateHandler(); // update model with control values
},
'update': function (element, valueAccessor) {
// skipping code
}
};
现在,当您使用 myvalue 绑定时,您的模型将使用初始绑定时的控制值进行更新:
<input type="text" data-bind="myvalue: name"></input>
或者,您可以调用原始值而不是复制所有代码,只需在 init 之后添加 valueUpdateHandler 中的代码:
ko.bindingHandlers['myvalue'] = {
'init': function (element, valueAccessor, allBindingsAccessor) {
// call existing value init code
ko.bindingHandlers['value'].init(element, valueAccessor, allBindingsAccessor);
// valueUpdateHandler() code
var modelValue = valueAccessor();
var elementValue = ko.selectExtensions.readValue(element);
ko.jsonExpressionRewriting.writeValueToProperty(modelValue, allBindingsAccessor, 'value', elementValue, /* checkIfDifferent: */ true);
},
'update': function (element, valueAccessor) {
// call existing value update code
ko.bindingHandlers['value'].update(element, valueAccessor);
}
};
如果您不想使用 AJAX,您始终可以通过将模型序列化为 JSON(razor 语法)来将值放入 javascript 中:
<script type="text/javascript">
var model = @(new HtmlString(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)));
</script>