2013-02-01 138 views
1

當Knockout視圖模型發生更改時,我有Kendo UI下拉不更新其UI。我可以得到一個普通的HTML選擇和純文本框來顯示新的模型值,但不是Kendo UI。我忽略了什麼?當Knockout視圖模型更新時,Kendo UI下拉未更新

這是代碼示例(和JSFiddle)。 fruitId最初應該是「2」(橙色),然後在點擊按鈕之後是「3」(香蕉)。文本框和兩個下拉列表在Knockout視圖模型(fruitId)中綁定爲相同的值。

隨着Kendo UI下拉菜單的手動更改,Knockout視圖模型被更新,並且普通下拉菜單和文本框顯示新值。但是,當按鈕被點擊並且代碼更新視圖模型時,文本框和普通下拉列表顯示正確的值,但是Kendo UI下拉列表不顯示正確的值。

的HTML

<p> 
    <label for="kendoDropDown">Kendo UI Drop Down</label> 
    <input id="kendoDropDown" type="text" data-bind="value: fruitId" /> 
</p> 
<p> 
    <label for="select">Plain old select</label> 
    <select id="select" data-bind="value: fruitId"> 
     <option value="1">apple</option> 
     <option value="2">orange</option> 
     <option value="3">banana</option> 
    </select> 
</p> 
<p> 
    <label for="textBox">Plain old text box</label> 
    <input id="textBox" type="text" data-bind="value: fruitId" class="k-textbox" /> 
</p> 
<p> 
    <button id="changeTo3" class="k-button">change fruitId to "3" (banana) programmatically</button> 
</p> 
<p> 
    <button id="changeTo2" class="k-button">change fruitId to "2" (orange) programmatically</button> 
</p> 

中的JavaScript

// Define the Knockout view model 
var ViewModel = function (data) { 
    var self = this; 
    self.fruitId = ko.observable(data.fruitId); 
} 

// Init the drop down 
var kendoDropDownData = [ 
    { id: "1", name: "apple"}, 
    { id: "2", name: "orange" }, 
    { id: "3", name: "banana" } 
]; 
$("#kendoDropDown").kendoDropDownList({ 
    dataValueField: "id", 
    dataTextField: "name",  
    dataSource: kendoDropDownData 
}); 

// Wire up KO bindidng 
var initialData = { fruitId: "2" }; 
ko.applyBindings(new ViewModel(initialData)); 

// Wire up the buttons 
$("#changeTo3").click(function() { 
    var newData = { fruitId: "3" }; 
    ko.applyBindings(new ViewModel(newData)); 
}); 
$("#changeTo2").click(function() { 
    var newData = { fruitId: "2" }; 
    ko.applyBindings(new ViewModel(newData)); 
}); 

回答

0

我最終使用Knockout訂閱而不是Knockout-Kendo庫。我在訂閱功能中的UI中設置了下拉值。

我還必須更改上面的代碼,以保持ViewModel的相同實例在內存中。在每個按鈕上單擊獲取新的ViewModel()意味着更改/訂閱代碼不會觸發。

1

您應該使用瑞安尼邁耶的淘汰賽KendoUI綁定http://rniemeyer.github.com/knockout-kendo/web/DropDownList.html

+0

我知道這個圖書館,但我正在考慮使用它作爲最後的手段。有沒有簡單的方法來更新Kendo UI下拉菜單的UI,以便在KO模型更改時顯示正確的值? –

+0

不,淘汰賽只是操縱DOM。 KendoUI庫(與任何其他UI組件一樣)監聽用戶輸入的各種DOM事件,但它不能檢測DOM更改,除非定期檢查哪些是完全不必要的。 –