2011-11-28 71 views
1

我正在处理单个页面应用程序,它涉及排序。 我使用将KnockOutJs.linkObservableToUrl映射值的类型转换为bool

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

实现该映射。它的工作原理,但问题是映射返回文字字符串“假”和“真”,而不是布尔值。这会导致复选框一个问题,这势必给该属性:

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

的问题是,我怎么可以从网址值转换为正确的类型(普通布尔),所以我的复选框将被更新正常吗?

回答

0

好吧,我发现如何克服这个问题。不是很优雅,但工作。 1.我认为,SortAsc将是我逻辑中的字符串属性。所以我就像在问题文本中一样将它绑定到url。只用字符串初始化它,而不是布尔("true" intead of true)。 2.我创建可写dependend观察到,这将做的皈依:

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不会更新复选框中的值。

相关问题