knockout.js负载形式进入视图模型(knockout.js load form into v

2019-09-17 18:04发布

我目前正在成功地利用knockout.js来处理我所有的数据绑定在我的应用程序。 然而,在每个页面加载,在我的document.ready我做这样的初始asnychronous数据加载:

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

然而,是否有可能代替,将数据加载到(使用ASP.NET MVC2)的格式,并然后反转数据加载到基于所述数据绑定标记视图模型?

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

Answer 1:

“价值”最初结合设置在您的视图模型的元素到一个值,所以没有。 然而,你也许可以复制的代码为“价值”结合到自己的处理程序,它从最初的控件的值设定的模型值。 下载调试版本的淘汰赛,并查找ko.bindingHandlers['value'] = {上线2182拷贝装订处理程序声明和变化“价值”别的东西,然后在结尾处添加到valueUpdateHandler()的调用在里面:

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>

另外,您可以调用原始值,而不是复制所有的代码,刚刚从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(剃刀语法)得到的值转换为JavaScript:

<script type="text/javascript">
var model = @(new HtmlString(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model)));
</script>


Answer 2:

有几种不同的方式来实现这一点这里的工作示例(不是我的):

http://jsfiddle.net/rniemeyer/5Z2SC/



文章来源: knockout.js load form into viewModel