给定以下JSON对象,使用ko.mapping映射:
{ AllowNotifications: ko.observable(true) }
我想将一个bool值绑定到一个单选按钮,这样如果True为一个单选对象,则为False,然后检查另一个单位。
<input data-bind="checked: AllowNotifications" type="radio" name="allowNotifications" value="true"><label class="small positive" for="objectNotifications_true">Yes</label>
<input data-bind="checked: AllowNotifications" type="radio" name="allowNotifications" value="false"><label class="small negative" for="objectNotifications_false">No</label>
目前,虽然没有抛出任何错误,但这并没有正确绑定。为什么这不起作用?
答案 0 :(得分:3)
绑定不起作用的原因是因为无线电的值“true”或“false”是一个字符串,而Knockout正试图绑定到文字的bool值。
一个合理的解决方法是指示Knockout将bool值true和false转换为字符串表示。为此,我们必须在将JSON映射到observables时提供一些说明:
例如:
var jsonData = { AllowNotifications: true };
var mapping = {
'AllowNotifications': {
create: function(options) {
return options.data ? 'true' : 'false';
}
}
};
viewModel = ko.mapping.fromJS(jsonData, mapping);
在上面的示例中,我们正在为AllowNotifications字段自定义ko.mapping的对象创建。
但是,如果我们有几个bool属性要转换,这将是多余和繁琐的,所以这是一个稍微更优雅的方法:
var jsonData = { AllowNotifications: true };
var boolToString = { create: function (options) { return options.data ? 'true' : 'false'; } };
var mapping = {
'AllowNotifications': boolToString,
'AnotherBoolProp': boolToString,
'YetAnotherBoolProp': boolToString
};
var viewModel = ko.mapping.fromJS(jsonData, mapping);
KO文档中提供了详细信息: http://knockoutjs.com/documentation/plugins-mapping.html