Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript knockoutjs2.0映射和修改映射对象_Javascript_Knockout.js - Fatal编程技术网

Javascript knockoutjs2.0映射和修改映射对象

Javascript knockoutjs2.0映射和修改映射对象,javascript,knockout.js,Javascript,Knockout.js,所以,在我使用knockout的第一周,我想我得到了一个很好的原型: 修剪并删除ajaxy调用 我现在要做的是将ko.oberservableArray更改为另一个绑定,如 在那里漂浮的一个 然而,如果没有这些,我认为我在建立模型和从web服务c获取数据时没有遵循正确的模式 有人能验证我的做法是否正确并帮助创建模式吗?我了解您的问题,您尝试通过ajax下载数据并将其存储在steeringTeamSheetViewModel的属性“viewModel”中。我觉得你的方式不错 您不应覆盖self.v

所以,在我使用knockout的第一周,我想我得到了一个很好的原型: 修剪并删除ajaxy调用

我现在要做的是将ko.oberservableArray更改为另一个绑定,如 在那里漂浮的一个

然而,如果没有这些,我认为我在建立模型和从web服务c获取数据时没有遵循正确的模式


有人能验证我的做法是否正确并帮助创建模式吗?

我了解您的问题,您尝试通过ajax下载数据并将其存储在steeringTeamSheetViewModel的属性“viewModel”中。我觉得你的方式不错

您不应覆盖self.viewModel。因为如果ko.applyBindings已经运行到了这一点,那么就会破坏绑定

self.ProcessRetrievedData = function (retrievedData) {
    // map the data from the viewModel and update self.viewModel
    self.viewModel(ko.mapping.fromJSON(retrievedData,mapping,{}));
};   

请记住,如果有大视图模型,ko.mapping将变得非常慢

这确实有效,我能够通过映射对象附加到create方法。我确实发现ko.mapping很慢,所以我创建了自己的方法,实际上,将嵌套数组映射到正确的对象。非常感谢。
"use strict";

var steeringTeamSheetViewModel = function (serviceUrl) {
var self = this;
var mapping = {
'sections': {
    create: function(options) {
        alert(options);
    }
}
}
self.viewModel = ko.mapping.fromJS([],mapping);

self.InitializeAjax = function () {
    //abbreviated  
};

self.GetData = function () {
    //abbreviated
    var data = {
        "Sections": [{
            "ProjectType": "BUSINESS EXPANSION",
                "Projects": [{
                "ID": "767a46a2-ddba-435c-a9f9-fdb9f0175337",
                    "ItemOrder": 0,
                    "ProjectName": "project abc"
            }, {
                "ID": "0e36d7da-92e6-4f1b-939d-936d6e759115",
                    "ItemOrder": 0,
                    "ProjectName": "project abc"
            }, {
                "ID": "f6e447d4-955d-48e0-bcdf-6db9044b7a89",
                    "ItemOrder": 0,
                    "ProjectName": "project a"
            }]
        }, {
            "ProjectType": "OPER & MAINT - EFFICIENCY",
                "Projects": [{
                "ID": "9883a3c8-d01e-4fc9-8f66-9b46d720afde",
                    "ItemOrder": 0,
                    "ProjectName": "project q"
            }]
        }, {
            "ProjectType": "OTHER",
                "Projects": [{
                "ID": "f1ccfa79-c5b1-4880-b5a1-1c2350e709e1",
                    "ItemOrder": 0,
                    "ProjectName": "project 1"
            }]
        }]
    };
    self.ProcessRetrievedData(data);
};

self.ProcessRetrievedData = function (retrievedData) {
    self.viewModel(retrievedData);
    //I think I should be using something like
    //self.viewModel = ko.mapping.fromJSON(retrievedData,mapping,{});
};   

self.GetData();
};
var steeringTeamSheetService = 'someurl';
var sts = new steeringTeamSheetViewModel(steeringTeamSheetService);
ko.applyBindings(sts);
self.ProcessRetrievedData = function (retrievedData) {
    // map the data from the viewModel and update self.viewModel
    self.viewModel(ko.mapping.fromJSON(retrievedData,mapping,{}));
};