Ove*_*lew 6 javascript knockout-mapping-plugin knockout.js
我试图弄清楚我对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'
Run Code Online (Sandbox Code Playgroud)
和相应的观点:
<div class='liveExample' >
<p>First name: <input data-bind='value: firstName' /></p>
<p>Last name: <input data-bind='value: lastName' /></p>
</div>
Run Code Online (Sandbox Code Playgroud)
我的JS小提琴例子.
nem*_*esv 11
该ko.mapping.fromJS处理的参数有点棘手(见我在这里的答案),所以第二个参数是正常的映射选项:
ko.mapping.fromJS(newData, {} /* mapping options */, myVM);
Run Code Online (Sandbox Code Playgroud)
演示JSFiddle.
我发现如何只使用2个数据参数.
创建ViewModel作为原始数据的映射,然后使用ko.mapping.fromJS(data, ViewModel).
更新的jsFiddle
说明
Knockout使用一个名为的属性mappingProperty = "__ko_mapping__"来识别以前映射数据的时间.如果找到,它将第二个参数设置为目标(在本例中为ViewModel).
摘自ko.mapping.js的调试版本:
var mappingProperty = "__ko_mapping__";
[...]
if (arguments.length == 2) {
if (arguments[1][mappingProperty]) {
target = arguments[1];
} else {
options = arguments[1];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9709 次 |
| 最近记录: |