首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >敲除ko.mappings.fromJS不工作

敲除ko.mappings.fromJS不工作
EN

Stack Overflow用户
提问于 2016-07-21 14:28:32
回答 3查看 1.5K关注 0票数 2

我正在尝试使用敲除映射,但它并不像我预期的那样工作。在这里,我创造了我所能做的最简单的小提琴,但它不起作用。

我是不是遗漏了什么?

https://jsfiddle.net/p48d11j5/1/

代码语言:javascript
复制
function Model(){
    var self = this;

    self.Id = ko.observable(0);
    self.Name = ko.observable("Default");
    self.Visible = ko.observable(false);
    self.Items = ko.observableArray([]);
}

function ModelItem(){
    var self = this;

    self.Id = ko.observable(0);
    self.Name = ko.observable("Default item name")
}

var m = new Model();

ko.mapping.fromJS({
    Id:1,
    Name: "Test",
    Visible: true,
    Items: [
    {
        Id:1,
        Name:"First"
    },
    {
        Id:2,
        Name:"Second"
    }
  ]
}, m);

ko.applyBindings(m);

编辑:我正在处理嵌套数组,所以我添加了数组。

edit2:我想让模型“类型化”使用它们的函数或ko.computed属性

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-21 20:05:41

如果使用两个参数调用ko.mapping.fromJS

ko.mapping.fromJS(data, mappedObject)第二个参数是mappedObject,它已经是created.Then,第二个参数将被视为viewModel而不是options

您所要做的就是: ko.mapping.fromJS( data,{},viewModel) --它将您的数据放入您的模型中。

代码语言:javascript
复制
ko.mapping.fromJS({
    Id:1,
    Name: "Test",
    Visible: true,
    Items: [{Id: 1, Name: "First"}, {Id: 2, Name: "Second"}]
  }, {} ,m);  // pass the second argument as an empty object.
票数 6
EN

Stack Overflow用户

发布于 2016-07-21 19:58:08

尝尝这个

代码语言:javascript
复制
var m = ko.mapping.fromJS({
    Id:1,
  Name: "Test",
  Visible: true,
  Items: [
    {
        Id:1,
      Name:"First"
    },
    {
        Id:2,
      Name:"Second"
    }
  ]
}, new Model());

ko.applyBindings(m);

工作示例:https://jsfiddle.net/p48d11j5/2/

票数 1
EN

Stack Overflow用户

发布于 2016-07-21 15:07:10

您可以尝试这样的方法,使用映射插件设置默认状态,并应用更新:

代码语言:javascript
复制
// Set up the initial model.
var model = ko.mapping.fromJS({
    Id: 0,
    Name: "Default",
    Visible: false,
    Items: []
});

ko.applyBindings(model);

// Map new data from the "server"...
var model = ko.mapping.fromJS({
    Id:1,
    Name: "Test",
    Visible: true,
    Items: [
    {
        Id:1,
        Name:"First"
    },
    {
        Id:2,
        Name:"Second"
    }
    ]
}, model);

// ...or directly manipulate the model.
model.Id(2);
model.Items.push({Id: 3, Name: "Third"});

https://jsfiddle.net/3evtx022/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38506981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档