2016-06-16 17 views
0

入力キーを押して検索を実行すると、キャプチャしようとしています。これは、検索ページのビューモデルです。Enterキーが押された場合、どのようにキャプチャしますか?

(function() 
{ 
    a.viewModels.userSearch = function (view, params) { 
     $view = $(view); 
     var self = a.viewModel({ 
      users: a.collection({ 
       url: '/admin/Account/SearchUsers', 
       query: { 
         SearchText: null 
         } 
      }).fetch(), 
      setPageIndex: setPageIndex, 
      search: search 
     }); 

     $view.keypress(function (e) { 
      if (e.keyCode == 13) { 
       self.search(e); 
      } 
     }); 

     function search(e) { 
      self.users.query.rowCount = 0; 
      self.users.query.pageIndex = 1; 
      self.users.fetch(); 
     } 

     function setPageIndex(e) { 
      e.preventDefault(); 
      self.users.query.set('pageIndex', $(e.currentTarget).data('page-index')); 
      self.users.fetch(); 
     } 

     return self; 
    } 

これで機能します。問題は、 'Enter'キーを2回押した後にのみ機能することです。私は範囲に関連する何かを見逃しているように見えますが、jsは私のお茶のカップではありません。

それは任意のヘルプであれば、ここでの私の見解モデル関数が行く:

function viewModel(viewModelConfig) { 

    var self = kendo.observable($.extend({ 
     busy: 0, 
     resultMessage: null, 
     clearResultMessage: clearResultMessage 
    }, viewModelConfig)); 
    self.bind('change', onChange); 

    function onChange(change) { 
     var errorProp, errorMsg, infoProp, infoMsg; 
     if (change.field.endsWith('.busy')) { 
      if (self.get(change.field)) 
       self.set('busy', self.busy + 1); 
      else if (self.busy > 0) 
       self.set('busy', self.busy - 1); 
     } 
     else if (change.field.endsWith('.resultMessage')) { 
      var data = self.get(change.field); 
      self.set('resultMessage', data); 
     } 
    } 

    function clearResultMessage(e) 
    { 
     if (e) e.preventDefault(); 
     self.set('resultMessage', null); 
     return false; 
    } 

    return self; 
} 

答えて

0

私は私のサイトに同様のセットアップを持っている、とMVVMを使用して、ちょうどenterはのdata-bind属性の中にカスタムバインディングを追加要素を実行したいビューモデル内の関数にリンクします。

カスタムバインダを追加するコードは次のような次のとおりです。

kendo.data.binders.widget.enter = kendo.data.Binder.extend({ 
    init: function(element, bindings, options) { 
     kendo.data.Binder.fn.init.call(this, element, bindings, options); 
     var binding = this.bindings.enter; 
     $(element.element).keyup(function(e) { 
      if(e.which === 13) 
       bindings.get(); 
     }); 
    }, 
    refresh: $.noop 
}); 
関連する問題