Javascript 用json初始化淘汰模型
我想用从服务器接收的json初始化一个敲除模型 目前,我有以下html:Javascript 用json初始化淘汰模型,javascript,knockout.js,Javascript,Knockout.js,我想用从服务器接收的json初始化一个敲除模型 目前,我有以下html: <div class='liveExample'> <p>First name: <input data-bind='value: firstName' /></p> <p>Last name: <input data-bind='value: lastName' /></p> <h2>Hell
<div class='liveExample'>
<p>First name: <input data-bind='value: firstName' /></p>
<p>Last name: <input data-bind='value: lastName' /></p>
<h2>Hello, <span data-bind='text: fullName'> </span>!</h2>
</div>
它是有效的,但如果我有更多的领域,它可能会很痛苦
我试着像这样使用映射插件:
var viewModel = new ViewModel();
data = { firstName: 'test', lastName: 'bla' }; //received from the server side
viewModel = ko.mapping.fromJSON(data, viewModel)
ko.applyBindings(viewModel);
在这种情况下,未定义方法fullName
我试着这样做:
viewModel = ko.mapping.fromJSON(viewModel, data)
而lastName
和firstName
未定义
有没有简单的解决办法
谢谢 如果数据的属性名称及其对应的viewModel可观察名称相同,则可以使用以下代码
var viewModel = new ViewModel();
for(var prop in data)
viewModel[prop](data[prop]);
ko.applyBindings(viewModel);
您需要使用
ko.mapping.fromJS()
,因为您使用的是真实的JavaScript对象
ko.mapping.fromJSON()
方法用于处理JSON字符串。例如:
'{ "firstName": "test", "lastName": "bla" }'
只有淘汰赛:
var ViewModel = function(data) {
var self = this;
self.firstName = ko.observable(data.first);
self.lastName = ko.observable(data.last);
self.fullName = ko.computed(function() {
return self.firstName() + "/" + self.lastName();
});
};
var data = {first: 'lorem', last: 'ipsum'};
ko.applyBindings(new viewModel(data));
击倒+ko.mapping
看起来更像你想要的吗?
var ViewModel = function(data) {
var self = this;
self.firstName = ko.observable(data.first);
self.lastName = ko.observable(data.last);
self.fullName = ko.computed(function() {
return self.firstName() + "/" + self.lastName();
});
};
var data = {first: 'lorem', last: 'ipsum'};
ko.applyBindings(new viewModel(data));
var ViewModel = function(data) {
var self = this;
ko.mapping.fromJS(initData, {}, self);
self.fullName = ko.computed(function() {
return self.firstName() + "/" + self.lastName();
});
};
var data = {first: 'lorem', last: 'ipsum'};
ko.applyBindings(new viewModel(data));