我正在尝试执行以下操作:(请参阅 jsfiddle 中的示例:http: //jsfiddle.net/graphicsxp/QJK99/1/)
javascript:
var originalData = {
id: 1,
name: "Main",
children: [ { id: 2, name: "bob" }, { id: 3, name: "ted" } ],
selectedChild: { id: 2, name: "bob" }
};
var viewModel = ko.mapping.fromJS(originalData);
viewModel.selectChild = function(){
var obj = { id: 9, name: "new" };
viewModel.selectedChild(obj);
}
ko.applyBindings(viewModel);
HTML:
<button data-bind="click: selectChild">click me</button>
<br/>
<span data-bind="text: selectedChild.name"></span>
但这不会显示 selectedChild 属性。我究竟做错了什么 ?
[编辑]
我不得不在这段代码中添加括号:
<span data-bind="text: selectedChild().name"></span>
这很好,但我还必须在映射后添加这行代码:
viewModel.selectedChild = ko.observable(viewModel.children()[0]);
这太烦人了。为什么我需要将属性隐式设置为 observable ?另外,如果我不给它一个默认值,它就不起作用。为什么 ?