Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用主干JS的jQuery自动完成插件_Javascript_Jquery_Jquery Ui_Backbone.js - Fatal编程技术网

Javascript 使用主干JS的jQuery自动完成插件

Javascript 使用主干JS的jQuery自动完成插件,javascript,jquery,jquery-ui,backbone.js,Javascript,Jquery,Jquery Ui,Backbone.js,假设我想使用jQueryUi在具有表单的backboneView中实现自动完成 我实现了以下代码(*), 但我不喜欢它,因为当用户不键入任何字母时,也会执行集合的获取 仅当用户开始在输入框中键入内容时,我应该如何执行抓取收集 var MyView = Backbone.View.extend({ initialize: function () { this.myCollection = new MyCollection(); this.myCollecti

假设我想使用jQueryUi在具有表单的backboneView中实现自动完成

我实现了以下代码(*), 但我不喜欢它,因为当用户不键入任何字母时,也会执行集合的获取

仅当用户开始在输入框中键入内容时,我应该如何执行抓取收集

var MyView = Backbone.View.extend({
    initialize: function () {
        this.myCollection = new MyCollection();
        this.myCollection.fetch(); // I would like to fetch the collection 
                                   // only when the user start to type the first letter  
    },
    events: {
        'focus #names': 'getAutocomplete'
    },

    getAutocomplete: function () {
        $("#names").autocomplete({
            source: JSON.stringify(this.myCollection)
        });
    }
});

附言:
当用户键入第一个字母时,应仅执行一次提取操作。

请尝试以下操作:

var MyView = Backbone.View.extend({
    initialize: function () {
        this.myCollection = new MyCollection();

    },
    events: {
        'focus #names': 'getAutocomplete',
        'keydown #names':'invokefetch'
    },
    invokefetch : function(){
       this.myCollection.fetch(); 
       $("#names").unbind( "keydown", invokefetch);
    },    
    getAutocomplete: function () {
        $("#names").autocomplete({
            source: JSON.stringify(this.myCollection)
        });
    }
});

这应该可以工作,并且只调用fetch一次

var MyView = Backbone.View.extend({
  initialize: function () {
    this.myCollection = new MyCollection();
    this.collectionFetched = false;
  },
  events: {
    'focus #names': 'getAutocomplete'
    'keydown #names': 'fetchCollection'
  },
  fetchCollection: function() {
    if (this.collectionFetched) return;
    this.myCollection.fetch();
    this.collectionFetched = true;
  },
  getAutocomplete: function () {
    $("#names").autocomplete({
        source: JSON.stringify(this.myCollection)
    });
  }
});

也许你错过了在某个地方添加
this.collectionFetched=true
?实际上我确实发布了另一个类似的问题,因为我想在自动完成模块中获取集合。要了解更多详细信息,请在每次关注名称时隐藏getAutocomplete。您可能希望在初始化中运行它。+1谢谢您的时间。实际上,我确实发布了另一个类似的问题,因为我想在自动完成模块中获取集合。欲知详情