我正在处理单页面应用程序,涉及排序。 我用
viewModel = new {
SortAsc = ko.observable(true)
};
ko.linkObservableToUrl(viewModel.SortAsc, "Asc", viewModel.SortAsc());
实现该映射。它的工作原理,但问题是映射返回文字字符串“false”和“true”而不是bool值。这会导致复选框出现问题,复选框绑定到该属性:
<input type="checkbox" data-bind="checked: SortAsc" value="Ascending"/>
问题是,如何将url中的值转换为正确的类型(普通bool),这样我的复选框才能正确更新?
答案 0 :(得分:0)
好的,我找到了如何克服这个问题。不是很优雅,但有效。
我假设,SortAsc将是我逻辑中的字符串属性。所以我把它留在了问题文本中的url。只用字符串初始化它,而不是bool("true"
intead of true
)。
2.我创建了可写的dependend observable,它将进行转换:
viewModel.SortAscBool = ko.dependentObservable({
read: function () {
return this.SortAsc() === "true";
},
write: function (value) {
this.SortAsc(String(value));
},
owner: viewModel
});
并将我的复选框绑定到该道具。所以现在,当复选框被选中时,SortAscBool被更改并且它将文字值设置为SortAsc(我认为这种转换确实不需要,但作为C#程序员我喜欢这样:))。当然,当SortAsc更改时,SortAscBool也会更改并将转换后的值返回到检查绑定。这才是真正需要的。
另外,我的第一个是简单地创建一种dependend observable,但是不会使用复选框中的值更新url。