我在单页应用程序上工作,这涉及到排序。我使用
viewModel = new {
SortAsc = ko.observable(true)
};
ko.linkObservableToUrl(viewModel.SortAsc, "Asc", viewModel.SortAsc());
来实现这种映射。它可以工作,但问题是映射返回的是文字字符串"false“和"true”,而不是布尔值。这会导致绑定到该属性的checkbox出现问题:
<input type="checkbox" data-bind="checked: SortAsc" value="Ascending"/>
问题是,如何将url中值转换为正确类型(普通布尔值),以便正确更新我的复选框?
发布于 2011-11-28 18:01:43
好了,我找到了克服这个问题的方法。不是很优雅,但很管用。1.我假设在我的逻辑中,SortAsc将是一个字符串属性。所以我把它绑定到url,就像在问题文本中一样。仅使用字符串初始化,而不是布尔型(true
的"true"
接口)。2.我创建了writeable,它将进行转换:
viewModel.SortAscBool = ko.dependentObservable({
read: function () {
return this.SortAsc() === "true";
},
write: function (value) {
this.SortAsc(String(value));
},
owner: viewModel
});
把我的复选框绑在那个道具上。所以现在,当复选框被选中时,SortAscBool会被更改,并将文字值设置为SortAsc (我认为实际上不需要这种转换,但作为一名C#程序员,我喜欢这种方式:)。当然,当SortAsc更改时,SortAscBool也会更改并将转换后的值返回到选中的绑定。这才是真正需要的。
此外,我的第一个想法是简单地创建单向依赖观察,但是url将不会使用复选框中的值进行更新。
https://stackoverflow.com/questions/8299925
复制