gpt4 book ai didi

asp.net-mvc-2 - knockout.js 将表单加载到 viewModel

转载 作者:行者123 更新时间:2023-12-04 18:19:54 27 4
gpt4 key购买 nike

我目前正在成功地使用 knockout.js 来处理我的应用程序中的所有数据绑定(bind)。但是,在每个页面加载时,在我的 document.ready 中,我正在执行一个初始异步数据加载,如下所示:

$(document).ready() {
getData()
});

但是,是否可以改为将数据加载到表单中(使用 ASP.NET MVC2),然后根据数据绑定(bind)标签将数据反向加载到 View 模型中?

我觉得这行不通,我只是想确认我没有做任何不当的事情。

最佳答案

'value' 绑定(bind)最初将元素的值设置为 View 模型中的值,所以不是。但是,您可能会将“值”绑定(bind)的代码复制到您自己的处理程序中,该处理程序最初会根据控件上的值设置模型值。下载debug version knockout ,并寻找ko.bindingHandlers['value'] = {在第 2182 行。复制此绑定(bind)处理程序声明并将“值”更改为其他内容,然后在 init 末尾添加对 valueUpdateHandler() 的调用:

ko.bindingHandlers['myvalue'] = {
'init': function (element, valueAccessor, allBindingsAccessor) {
// skipping code
valueUpdateHandler(); // update model with control values
},
'update': function (element, valueAccessor) {
// skipping code
}
};

现在,当您使用 myvalue 绑定(bind)时,您的模型将在最初绑定(bind)时使用控制值进行更新:
<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>

关于asp.net-mvc-2 - knockout.js 将表单加载到 viewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10886795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com