Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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 敲除映射-fromJS-在一个简单的示例中失败_Javascript_Knockout.js_Knockout Mapping Plugin - Fatal编程技术网

Javascript 敲除映射-fromJS-在一个简单的示例中失败

Javascript 敲除映射-fromJS-在一个简单的示例中失败,javascript,knockout.js,knockout-mapping-plugin,Javascript,Knockout.js,Knockout Mapping Plugin,我试图找出我对Knockout的映射库的误解。我已经把它简化为一个简单的例子,仍然可以通过调用fromJS使它失败(而不是使用映射的变量进行更新) 在这个例子中,我的根本错误是什么 // Here's my view model var ViewModel = function() { this.firstName = ko.observable('first'); this.lastName = ko.observable('last'); }; var myVM = new

我试图找出我对Knockout的映射库的误解。我已经把它简化为一个简单的例子,仍然可以通过调用
fromJS
使它失败(而不是使用映射的变量进行更新)

在这个例子中,我的根本错误是什么

// Here's my view model
var ViewModel = function() {
    this.firstName = ko.observable('first');
    this.lastName = ko.observable('last');
};

var myVM = new ViewModel();

ko.applyBindings(myVM); // Apply to Knockout (works)

myVM.lastName('maiden name'); // Test an update (works)

var newData = {firstName: 'new', lastName: 'person'};

// Try update the ViewModel
ko.mapping.fromJS(newData, myVM); //(No update, or error)

// Intended result - UI updates to 'new person'
以及相应的观点:

<div class='liveExample' >   
    <p>First name: <input data-bind='value: firstName' /></p> 
    <p>Last name: <input data-bind='value: lastName' /></p> 
</div>

名字:

姓氏:


My.

ko.mapping.fromJS处理参数有点棘手(请参见My),因此第二个参数通常是映射选项:

ko.mapping.fromJS(newData, {} /* mapping options */, myVM); 

演示。

我发现如何仅使用2个数据参数

创建ViewModel作为原始数据的映射,然后使用
ko.mapping.fromJS(数据,ViewModel)

更新

解释

Knockout使用一个名为
mappingProperty=“\uuuu ko\u mapping\uuuu”
的属性来标识以前映射数据的时间。如果找到,它会将第二个参数设置为目标(本例中为ViewModel)

摘自ko.mapping.js调试版本:


真狡猾!我会像“飞越汉克斯”一样挣扎。在的淘汰映射文档肯定让我走错了路。我正在阅读它们,仍在试图理解调用2-param版本的正确上下文…啊,我现在明白了-感谢您在其他链接答案中对1/2/3参数的解释。
var mappingProperty = "__ko_mapping__";

[...]

if (arguments.length == 2) {
  if (arguments[1][mappingProperty]) {
    target = arguments[1];
  } else {
    options = arguments[1];
  }
}