我目前正在成功地利用knockout.js来处理我所有的数据绑定在我的应用程序。 然而,在每个页面加载,在我的document.ready我做这样的初始asnychronous数据加载:
$(document).ready() {
getData()
});
然而,是否有可能代替,将数据加载到(使用ASP.NET MVC2)的格式,并然后反转数据加载到基于所述数据绑定标记视图模型?
我觉得这是不行的,我只是想确认我没有做任何事情不正确。
我目前正在成功地利用knockout.js来处理我所有的数据绑定在我的应用程序。 然而,在每个页面加载,在我的document.ready我做这样的初始asnychronous数据加载:
$(document).ready() {
getData()
});
然而,是否有可能代替,将数据加载到(使用ASP.NET MVC2)的格式,并然后反转数据加载到基于所述数据绑定标记视图模型?
我觉得这是不行的,我只是想确认我没有做任何事情不正确。
“价值”最初结合设置在您的视图模型的元素到一个值,所以没有。 然而,你也许可以复制的代码为“价值”结合到自己的处理程序,它从最初的控件的值设定的模型值。 下载调试版本的淘汰赛,并查找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>
有几种不同的方式来实现这一点这里的工作示例(不是我的):
http://jsfiddle.net/rniemeyer/5Z2SC/