淘汰赛 ko.mappings.fromJS 不工作
Posted
技术标签:
【中文标题】淘汰赛 ko.mappings.fromJS 不工作【英文标题】:Knockout ko.mappings.fromJS not working 【发布时间】:2016-11-25 05:00:11 【问题描述】:我正在尝试使用淘汰赛映射,但它没有按预期工作。 在这里,我创建了最简单的小提琴,但它不起作用。
我错过了什么吗?
https://jsfiddle.net/p48d11j5/1/
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 属性
【问题讨论】:
这是你想要做的吗? jsfiddle.net/kyr6w2x3/21 @Matt.kaaj 是的,就是这样,但我想使用映射插件,所以我不需要以这种方式传递数据。 如果您想使用mapping plugin
,请查看我的回答。
【参考方案1】:
如果您使用两个参数调用ko.mapping.fromJS
:ko.mapping.fromJS(data, mappedObject)
第二个参数是已经创建的mappedObject
。那么第二个参数将被视为viewModel
而不是options
。
您所要做的就是:ko.mapping.fromJS(data, , viewModel) - 这个将您的数据放入您的模型中。
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.
【讨论】:
【参考方案2】:试试这个
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/
【讨论】:
【参考方案3】:您可以尝试这样的事情,使用映射插件来设置您的默认状态以及应用更新:
// 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/
【讨论】:
感谢您的回复。但我希望模型具有“类型”,所以我可以在它们上使用函数或 ko.computed 属性。有什么办法吗?还是我应该放弃?以上是关于淘汰赛 ko.mappings.fromJS 不工作的主要内容,如果未能解决你的问题,请参考以下文章