Javascript 将ajax调用返回的复杂数组数据绑定到viewmodel
我有一个RetrieveEntityWeb服务方法,它以json字符串和数组的形式返回字段。我无法将这些字段绑定到文本框,同时保持视图模型不变。首先,我调用ajax来初始化数据并保存它。然后,在viewmodel中,我重新记录这些值,并绑定到所需的文本框。代码如下:Javascript 将ajax调用返回的复杂数组数据绑定到viewmodel,javascript,html,jquery,knockout.js,knockout-mapping-plugin,Javascript,Html,Jquery,Knockout.js,Knockout Mapping Plugin,我有一个RetrieveEntityWeb服务方法,它以json字符串和数组的形式返回字段。我无法将这些字段绑定到文本框,同时保持视图模型不变。首先,我调用ajax来初始化数据并保存它。然后,在viewmodel中,我重新记录这些值,并绑定到所需的文本框。代码如下: <script type="text/javascript" language='javascript'> jQuery(function () { myViewModel = new viewmodel(
<script type="text/javascript" language='javascript'>
jQuery(function () {
myViewModel = new viewmodel();
ko.applyBindings(myViewModel);
});
var invoice = function () {
var initializeURL = "ajaxwebservicecalls.asmx/RetrieveEmptyEntity";
$.ajax({
type: "Post",
url: initializeURL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function retrieveemptyesuccess(msg) {
passedmodel = (msg.d.Data);
var data = ko.mapping.fromJS(passedmodel);
var x = $.toJSON(passedmodel)
},
Error: function initializefail(msg) { alert(msg) }
});
}
接下来,我将根据返回的数据构建viewmodel:
var passedmodel;
var myViewModel;
var viewmodel = function () {
this.invoice = ko.observable(new invoice());
this.arrayentity = ko.observableArray([new invoice("ff"), new invoice("dd"), new invoice("zz"), new invoice("rr")]);
this.RetrieveEntity = function () {
var retrieveURL = "ajaxwebservicecalls.asmx/RetrieveEntity";
$.ajax({
type: "Post",
url: retrieveURL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function retrievesuccess(msg) {
passedmodel = msg.d.Data;
myViewModel.invoice(ko.mapping.fromJS(passedmodel, {}, myViewModel)); }
//我希望能够使用上述内容,然后在HTML绑定中指定,例如:
data-bind="value:myViewModel.invoice().APInvoiceHeader.VoucherNumber"
或
然而,绑定语法给了我一个错误。相反,我解析了viewmodel,无法将其作为一个整体使用:
myViewModel.invoice(ko.mapping.fromJS(passedmodel.APInvoiceHeader, {}, myViewModel));
或
然后HTML绑定看起来像
data-bind="value:myViewModel.invoice().VoucherNumber
或
绑定很好,但我不希望viewmodel看起来像这样。
我需要将viewmodel保持为一体并进行解析或浏览的原因是,我需要在屏幕上下一次更新值,更新viewmodel,然后将viewmodel转换回JS,并将其传递给另一个保存新数据的ajax调用
有人能帮忙吗?任何提示都将不胜感激。谢谢 你能把这些东西拼凑起来吗。这将使您的问题更容易排除。
myViewModel.invoice(ko.mapping.fromJS(passedmodel.APInvoiceHeader, {}, myViewModel));
myViewModel.arrayentity([(ko.mapping.fromJS(passedmodel.Entities.Entity[0])), (ko.mapping.fromJS(passedmodel.Entities.Entity[1]))]);
data-bind="value:myViewModel.invoice().VoucherNumber
data-bind="value:myViewModel.arrayentity()[0].Name"