Knockout JS проблема подписки - PullRequest
1 голос
/ 13 февраля 2012

Мы используем KnockoutJS для обработки пользовательского интерфейса и перемещения деталей в пользовательском интерфейсе.

Так вот в чем проблема:

У нас есть сетка, в которой мы имеем столбцы фильтра.Фильтрует данные на вкладке.Недавно мы получили запрос на фильтрацию данных на Enter.Так как нокаут обеспечивает метод подписки, который автоматически запускает действие, которое я хочу.Есть ли способ иметь пользовательскую реализацию метода подписки, которая может быть запущена при вводе.

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);
            }
        });
    }

};

Ответы [ 2 ]

1 голос
/ 10 марта 2012

Ответ Иуды близок, за исключением того, что метод onkeydown должен выглядеть следующим образом (по крайней мере, для меня это так):

self.OnSearchTermKeydown = function (me,event){
            if (event.keyCode === 13) { 
              location.href=searchURL + me.SearchValue;
              return false;
            }

              return true;
          };
1 голос
/ 13 февраля 2012

Что такое столбец фильтра - текстовое поле HTML?

Если это так, вы можете перенести значения из текстового поля в наблюдаемую с помощью опции привязки valueUpdate :

<p>Your value: <input data-bind="value: someValue, valueUpdate: 'afterkeydown'" /></p>

ko.observable, называемый "someValue", будетнажимать новые значения после каждого нажатия клавиши.

В качестве альтернативы, вы можете связать событие нажатия клавиши вниз и искать клавишу ввода:

<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... 
    }
}
...