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

发布于 2024-12-18 13:23:15 字数 418 浏览 0 评论 0原文

我正在开发单页应用程序,其中涉及排序。 我用它

viewModel = new {
    SortAsc = ko.observable(true)
};
ko.linkObservableToUrl(viewModel.SortAsc, "Asc", viewModel.SortAsc());

来实现该映射。它有效,但问题是映射返回文字字符串“false”和“true”而不是布尔值。这会导致绑定到该属性的复选框出现问题:

<input type="checkbox" data-bind="checked: SortAsc" value="Ascending"/>

问题是,如何才能将 url 中的值转换为正确的类型(普通 bool),以便我的复选框能够正确更新?

I'm working on single page application, which involves sorting.
I use

viewModel = new {
    SortAsc = ko.observable(true)
};
ko.linkObservableToUrl(viewModel.SortAsc, "Asc", viewModel.SortAsc());

to achieve that mapping. And it works, but the problem is that mapping returns literal strings "false" and "true" instead of bool value. This causes a problem with checkbox, which is bound to that property:

<input type="checkbox" data-bind="checked: SortAsc" value="Ascending"/>

The question is, how can I make that value from url to be converted to correct type (normal bool), so my checkbox will be updated properly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮萍、无处依 2024-12-25 13:23:15

好的,我找到了如何克服这个问题。不是很优雅,但很有效。
1. 我假设,SortAsc 在我的逻辑中将是一个字符串属性。所以我把它绑定到问题文本中的 url 上。仅使用字符串初始化它,而不是 bool ("true" 而不是 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 也会更改并将转换后的值返回到检查绑定。这才是真正需要的。

另外,我的第一个想法是简单地创建单向依赖的可观察对象,但随后 url 将不会使用复选框中的值进行更新。

Ok, I found how to overcome that problem. Not very elegant, but works.
1. I assumed, that SortAsc will be a string property in my logic. So I left it bound to url like in the question text. Only initialized it with string, istead of bool ("true" intead of true).
2. I created writeable dependend observable, which will do the convertion:

viewModel.SortAscBool = ko.dependentObservable({
    read: function () {
        return this.SortAsc() === "true"; 
    },
    write: function (value) {
        this.SortAsc(String(value));
    },
    owner: viewModel
});

and bound my checkbox to that prop. So now, when checkbox is checked, SortAscBool is changed and it sets literal value to SortAsc (I think this convertion is really not needed, but as a C# programmer I like it that way :)). And of course, when SortAsc changes, SortAscBool will also change and return the converted value to checked binding. And that is what was really needed.

Also, my first though was to simply create one way dependend observable, but then url will not be updated with values from checkbox.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文