我们正在使用KnockoutJS在UI中处理UI和移动部件。
所以这就是问题所在:
我们有网格,我们有过滤列。它过滤掉标签上的数据。最近我们收到了在Enter上过滤数据的请求。由于knockout提供了自动触发我想要的动作的订阅方法。有没有办法实现订阅方法的自定义实现,可以在输入时触发。
var triggerQueryIfOk = function () {
if (!self.isLoading() && !self.isOpening) self.runQuery();
};
self.filters.empName.subscribe(triggerQueryIfOk);
};
self.getQueryParameters = function () {
return {
empName: self.filters.empName() };
};
self.runQuery = function () {
if (!self.isLoading()) {
self.isLoading(true);
// prepare query data
var query = self.getQueryParameters();
// hit server
$.ajax({
url: self.getEmployeesUrl,
type: "POST",
data: JSON.stringify(query),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (rawInvestmentsData) {
processEmployees(rawInvestmentsData);
self.isLoading(false);
},
error: function () {
self.isLoading(false);
}
});
}
};
答案 0 :(得分:1)
什么是过滤列 - HTML文本框?
如果是这样,您可以使用valueUpdate binding option将文本框中的值推送到observable:
<p>Your value: <input data-bind="value: someValue, valueUpdate: 'afterkeydown'" /></p>
每次按键后,名为“someValue”的ko.observable将被推送新值。
或者,您可以绑定按键事件并查找回车键:
<p>Your value: <input data-bind="value: someValue, event: { keydown: onKeyDown }" /></p>
...
viewModel.onKeyDown = function (sender, e) {
if (e.keyCode === 13) {
// the enter key, do something here...
}
}
答案 1 :(得分:1)
犹大的答案很接近,除了onkeydown方法看起来应该是这样的(至少对我而言):
self.OnSearchTermKeydown = function (me,event){
if (event.keyCode === 13) {
location.href=searchURL + me.SearchValue;
return false;
}
return true;
};