gpt4 book ai didi

javascript - KnockoutJS 自定义绑定(bind)无法触发可观察更改的更新回调

转载 作者:行者123 更新时间:2023-12-03 09:54:06 25 4
gpt4 key购买 nike

当我的可观察数组发生更改时,不会触发更新回调。请帮忙。这是我的自定义绑定(bind):

ko.bindingHandlers.selectizeBinding ={
update: function(element, valueAccessor){
var value = valueAccessor();
var ords = ko.unwrap(value);
alert(ords);
},
init: function(){},
}

我的ViewModel是这样的:

function poReceivingModel(){
var self = this;
self.order_id = ko.observable();
self.opts = ko.observableArray();
self.getOptions = ko.computed(function(){
var odr_id = ko.unwrap(self.order_id)
var url = '/po/order_products_asjson/' + String(odr_id)
if(typeof(odr_id) != 'undefined'){
$.ajax({
url: url,
dataType: 'json',
async: false,
success: function(data) {
self.opts = data.options;
}
});
}
return self.opts;
});
}

html 是:

<select data-bind="value: order_id">
<option value="1">option1</option>
<option value="2">option2</option>
<select data-bind="selectizeBinding: opts"</select>

当“self.opts”可观察数组更改时,我无法触发更新。请帮我。“init”和“update”回调在开始时被调用一次。之后,当我观察到更改时,不会调用更新回调。

最佳答案

JSFiddle - 使用setTimeout来模拟ajax调用。

您没有在 ajax 回调中正确设置“opts”。需要用函数来设置。

function poReceivingModel(){
var self = this;
self.order_id = ko.observable();
self.opts = ko.observableArray();
self.getOptions = ko.computed(function(){
var odr_id = ko.unwrap(self.order_id)
var url = '/po/order_products_asjson/' + String(odr_id)
if(typeof(odr_id) != 'undefined'){
$.ajax({
url: url,
dataType: 'json',
async: false,
success: function(data) {
self.opts(data.options);
}
});
}
return self.opts;
});
}

您还有一些格式错误的 HTML

<select data-bind="value: order_id">
<option value="1">option1</option>
<option value="2">option2</option>
</select>

<select data-bind="selectizeBinding: opts"</select>

关于javascript - KnockoutJS 自定义绑定(bind)无法触发可观察更改的更新回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30791957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com