Knockout.js 仅从淘汰视图模型复制可写项

Knockout.js 仅从淘汰视图模型复制可写项,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,在我的ViewModel中有几个项目包括函数和可观察变量,但在发布时,我只需要可写的项目 var viewModel = { firstName: ko.observable().extend({ minLength: 2, maxLength: 10 }), lastName: ko.observable().extend({ required: true }), emailAddress: ko.observable(), age: ko.observable

在我的ViewModel中有几个项目包括函数和可观察变量,但在发布时,我只需要可写的项目

var viewModel = {
    firstName: ko.observable().extend({ minLength: 2, maxLength: 10 }),
    lastName: ko.observable().extend({ required: true }),
    emailAddress: ko.observable(),
    age: ko.observable().extend({ min: 1, max: 100 }),
    options: ['News', 'Music'],
    subscription: ko.observable().extend({ required: true }),
    password: ko.observable(),
    submit: function () {
        var model = cloneObservable(viewModel);
    },
    reset: function () {
    }
};

ko.applyBindings(viewModel);
克隆视图模型:

 function cloneObservable(viewModel) {
    var model = ko.observableArray([]);
    Object.keys(viewModel).forEach(function (name) {
        if (ko.isWritableObservable(viewModel[name])) {
            model.push(viewModel[name]);
        }
    })
    return ko.mapping.fromJS(ko.toJS(model));
 }

viewModel[name]不返回可观察变量。

您必须获取viewModel的实例,并在
CloneObservable
函数中使用该实例

我从函数中删除了
ko.mapping.fromJS
,以说明这些值是正确的

函数cloneObservable(视图模型){
var模型=ko.observearray([]);
Object.keys(viewModel).forEach(函数名){
if(ko.isWritableObservable(viewModel[name])){
model.push(viewModel[name]);
}
})
返回ko.toJS(模型);
}
var viewModel=函数(){
var self=这个;
self.firstName=ko.observable('sal').extend({minLength:2,maxLength:10});
self.lastName=ko.observable('mon').extend({required:true});
self.emailAddress=ko.observable(“电子邮件”);
self.age=ko.observable(21).extend({min:1,max:100});
self.options=[“新闻”,“音乐];
self.subscription=ko.observable('yes').extend({required:true});
self.password=ko.observable('secret');
self.submit=函数(){
};
};
var viewModelInstance=new viewModel();
应用绑定(viewModelInstance);
log(cloneObservable(viewModelInstance))