Javascript 用json初始化淘汰模型

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

我想用从服务器接收的json初始化一个敲除模型

目前,我有以下html:

<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));