我得到了以下内容:
<select data-bind="options: infoLogMessages, selectedOptions: setCurrentInfoLogMessage"></select>
我有一个看起来像的视图模型:
var InfoLogFilterVM = function () {
this.propertyChangeSupport = new KnockoutPropertyChangeSupport(this);
this.currentInfoLogMessage = ko.observable();
this.infoLogMessages = ko.observableArray();
}
InfoLogFilterVM.prototype = (function() {
return {
PROP_CURRENTINFOLOGMESSAGE: "currentInfoLogMessage",
PROP_INFOLOGMESSAGES: "infoLogMessages",
addPropertyChangeListener: function(listener) {
this.propertyChangeSupport.addListener(listener);
},
removePropertyChangeListener: function(listener) {
this.propertyChangeSupport.removeListener(listener);
},
setCurrentInfoLogMessage: function(currentInfoLogMessage) {
var oldValue = this.currentInfoLogMessage();
this.currentInfoLogMessage(currentInfoLogMessage);
this.propertyChangeSupport.firePropertyChangeEvent(this.PROP_CURRENTINFOLOGMESSAGE, oldValue, currentInfoLogMessage);
},
getCurrentInfoLogMessage: function() {
return this.currentInfoLogMessage();
},
setInfoLogMessages: function(infoLogMessages) {
var oldValue = this.infoLogMessages();
this.infoLogMessages(infoLogMessages);
this.propertyChangeSupport.firePropertyChangeEvent(this.PROP_INFOLOGMESSAGES, oldValue, infoLogMessages);
},
getInfoLogMessages: function () {
return this.infoLogMessages();
},
}
}());
我希望在视图模型中调用setCurrentInfoLogMessage函数,这样我就可以触发属性更改事件,这意味着我对直接调用currentInfoLogMessage属性不感兴趣:
selectedOptions: currentInfoLogMessage
我尝试将selectedOptions更改为
value: setCurrentInfoLogMessage
我也尝试过这样的事情:
selectedOptions: function (_infoLogMessage) { setCurrentInfoLogMessage(_infoLogMessage) }
但没有任何作用。
实际上是否有一种方法可以使用selectedOptions或value属性调用data-bind属性中的自定义函数?
答案 0 :(得分:0)
正如我的评论中提到的,我建议从另一种方式接近这一点。也就是说,使用writable computed observables:
可以实现您的目标var _logMessageValue = ko.observable();
this.currentInfoLogMessage = ko.pureComputed({
read: function () {
return this._logMessageValue();
},
write: function (value) {
var oldValue = this._logMessageValue();
this._logMessageValue(value);
this.propertyChangeSupport.firePropertyChangeEvent(this.PROP_CURRENTINFOLOGMESSAGE, oldValue, value);
},
owner: this
});