[英]Knockout custom binding not triggering for Update to observable
我有一個簡單的綁定測試。 頁面打開時將調用Init和Update。 但是,如果我通過調用函數來手動更新可引用對象,則不會在綁定處理程序中調用update方法。
因此,它首先將selectedQueue設置為2。正確單擊按鈕會在選擇中選擇第三個元素。 但是沒有要求我的綁定處理程序進行此更改。
有什么簡單的我想念的嗎?
<select id="productGroup" name="productGroupen" data-bind="value:selectedQueue, treeMenu: selectedQueue">
<option value="1" selected="selected">Group 1</option>
<option value="2">Group 2</option>
<option value="3">Group 3</option>
</select>
<div data-bind="text: selectedQueue"></div>
<button data-bind="click:setQueue">Set to 3</button>
<script src="~/Scripts/knockout-3.4.0.js"></script>
<script>
ko.bindingHandlers.treeMenu = {
init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
alert("init")
x = valueAccessor();
},
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
alert("update");
x = valueAccessor();
}
};
var Model = function () {
self = this;
this.selectedQueue = ko.observable(2);
this.setQueue = function () {
this.selectedQueue(3);
}
}
$(document).ready(function () {
ko.applyBindings(new Model());
});
</script>
就我而言,問題是使用剔除3.4
如下將我的淘汰賽更改為2.2.1,問題消失了。
<script src="http://knockoutjs.com/downloads/knockout-2.2.1.debug.js"></script>
不知道問題是什么。
淘汰賽文檔說:
當綁定應用於元素時,Knockout會首先調用update回調,並跟蹤您訪問的所有依賴項(可觀察對象/計算對象)。 當這些依賴項中的任何一個發生更改時,將再次調用update回調。
而且在您的代碼中,您還沒有訪問“實際可觀察到的”,因為valueAccessor()
僅獲取傳遞的值。 因此,對此沒有任何依賴關系,並且不會調用update
。
你需要用你的valueAccessor()
與ko.unwrap
或致電valueAccessor()()
獲得“實際觀察到的”。
update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
alert("update");
x = ko.unwrap(valueAccessor());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.