在typeahead-wait-ms和触发的请求数之间取得平衡(angular ui typeahead)

时间:2016-05-16 21:17:08

标签: javascript angularjs twitter-bootstrap angular-ui typeahead

我正在使用angular-ui进行打字,我遇到了一些问题。具体来说,我正在看这个变量

typeahead-wait-ms $ (Default: 0) - Minimal wait time after last character typed before typeahead kicks-in.

我发现通过使用这个变量并将其设置为300毫秒左右,我已经大大减少了对后端的请求数量。这是一件好事。

但是,我现在需要在文本栏中的文本更新之前等待我返回的数据结构。

它有点像这样。

左侧带有“X”的术语是默认突出显示的内容。

1)
[foo]              <----- current text in text bar
    -X[foo]        <----- original text {"text" : "foo"}
    - [match 1]     <----- match 1 {"text" : "match1"}
    - [match 2]     <----- match 2 {"text" : "match2"}

2)
[foo bar]          <----- updated text in text bar
    -X[foo]        <----- note that the typeahead contents have not yet updated
    - [match 1]     <----- at this point we are fetching matches for "foo bar" from the backend
    - [match 2]    

3)
[foo bar]              <----- updated text in text bar
    -X[foo bar]        <----- after the 300ms, the typeahead contents updates
    - [match 3]    
    - [match 4]    

我的问题是....当我在步骤2和3之间点击回车键时,内容没有从后端返回...所以而不是

function select($item, $model, $label) {
    //$item.text = "foo bar" 

这是文本栏中的术语,我得

function select($item, $model, $label) {
    //$item.text = "foo" 

这是内容更新前的最后一个“突出显示的术语”。

我试图比较ng-model变量......就像这样

// typeahead html
ng-model= "term"
typeahead-on-select="select"

// bound function
function select($item, $model, $label) {
    alert($scope.term);
}

然后$ scope.term出现未定义。

现在,当我完全删除typeahead-wait-min时,请求的启动速度比我输入的速度快。所以这没关系...但我不想对用户输入的每个字符提出请求。

只是spitballing解决方案...有没有办法立即将原始搜索词放在结果中,然后在准备好时填写其余的结果?

0 个答案:

没有答案