使用挖空映射将硬编码数据映射到服务器端生成的数据

时间:2015-03-30 10:06:46

标签: knockout.js knockout-2.0 knockout-mapping-plugin

显示的代码here是RP Niemeyer的knockout-sortable.js示例的修改版本,由lossleader创建,作为答案here

这是一个数据模型如下..

var Table = function(id, name, students,maxstudents,allowedstudentgender) {
    this.students = ko.observableArray(students);
    this.students.id = id;
    this.name = ko.observable(name);
    this.students.maxstudents=ko.observable(maxstudents);
    this.students.allowedstudentgender= ko.observableArray(allowedstudentgender);
};

连续数据如下..

    var initialTables = [
        new Table(1,"Table One",  [
           new Student(3, "Jim", "male"),
             new Student(6, "Chase", "male")
        ],2,["male"])
//and so on..
    ];

数据在vm中初始化如下..

var SeatingChartModel = function(tables, availableStudents) {
    var self = this;
    this.tables = ko.observableArray(tables);

但是当数据从服务器带来并使用knockout-mapping.js映射到knockout viewmodel时,我所做的就是如下..

    var SeatingChartModel = function() {
            var self = this;
            this.tables = ko.observableArray();
    // more stuff happens here..and then..

     $.get('/api/gettables', function (data) {
        self.tables(ko.mapping.fromJS(data)()); // for jtoken
              OR
        self.tables(ko.mapping.fromJS(JSON.parse(data))()); // for json
    };

在这种情况下,我无法确定从服务器发送的json的必要数据结构。

真心感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

使用arraymap解决它..

this.tables = ko.observableArray();
    var temptables= ko.utils.arrayMap(dataFromServer, function(item) {
    return new Table(item.id,item.name, item.students, item.maxstudents, item.allowedstudentgender);
        });
        this.tables(temptables);