2011-11-28 65 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不會更新複選框中的值。

相關問題