Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测试对象上的属性是否为单个可观察(而不是可观察)属性_Javascript_Knockout.js - Fatal编程技术网

Javascript 测试对象上的属性是否为单个可观察(而不是可观察)属性

Javascript 测试对象上的属性是否为单个可观察(而不是可观察)属性,javascript,knockout.js,Javascript,Knockout.js,我希望能够迭代一个对象的knockoutJS可观察属性,并将它们复制到另一个包含其他可观察属性的对象。目标对象存在于ObservalArray中(在这种情况下,所选对象是目标,并通过“编辑”按钮单击进行设置) “项”在绑定到对话框的viewmodel中传递。如果单击“取消”,则忽略该项;如果单击“确定”,则将数据持久保存在服务器上,然后将项属性复制到选定项 目前我是这样做的: function AttachCommitData(item) { fo

我希望能够迭代一个对象的knockoutJS可观察属性,并将它们复制到另一个包含其他可观察属性的对象。目标对象存在于ObservalArray中(在这种情况下,所选对象是目标,并通过“编辑”按钮单击进行设置)

“项”在绑定到对话框的viewmodel中传递。如果单击“取消”,则忽略该项;如果单击“确定”,则将数据持久保存在服务器上,然后将项属性复制到选定项

目前我是这样做的:

function AttachCommitData(item) {                
        for ( var prop in item) {            
            if ( prop !== "undefined" ) {
                vm.selected[item](item[prop]);
            }
        }
    }
我不确定这是否是实现它的方法,但它会抛出一个异常,因为该项包含一个observableArray,而对observableArray的复制失败。无论如何,是否只对可观测项进行迭代,而忽略循环中的任何其他内容,如可观测项、函数等


如果您还可以建议,这是否是将一组可观测数据附加到另一组的最佳方式。

我可能会为此使用映射插件:

function attachCommitData(item){
    ko.mapping.fromJS(ko.mapping.toJS(item), vm.selected);
}

有关详细信息,请参阅映射插件。

我已尝试将该项映射到vm.selected,其中vm.selected指向ObservalArray中已存在的元素,该元素也是通过映射插件创建的。它似乎没有更新它。有什么想法吗?您可能想在JSFIDLE上发布代码来澄清您的问题。