将KnockOutJs.linkObservableToUrl映射值的类型转换为bool

时间:2011-11-28 17:38:02

标签: boolean knockout.js

我正在处理单页面应用程序,涉及排序。 我用

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),这样我的复选框才能正确更新?

1 个答案:

答案 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。