TypeaheadJS 方法未将数组转换为值

Posted

技术标签:

【中文标题】TypeaheadJS 方法未将数组转换为值【英文标题】:TypeaheadJS Method not converting Array to values 【发布时间】:2015-05-22 15:10:22 【问题描述】:

我正在使用 typeahead.js。

当我从 apiController 获取数据时,它看起来像这样:

["JobName1", "JobName1", "akhsfkh"]

当它通过这段代码时:

 $(function() 
    var projectNumbers = $.getJSON("api/Project/GetAllNumbers")
        .done(function(result) 
            console.log(result);
            return result; // ["JobName1", "JobName1", "akhsfkh"] is here
        )
        .fail(function(jqXHR, textStatus, err) 
            alert('Error: ' + err);
        );


    var substringMatcher = function(strs) 
        return function findMatches(q, cb) 
            var matches, substrRegex;

            // an array that will be populated with substring matches
            matches = [];

            // regex used to determine if a string contains the substring `q`
            substrRegex = new RegExp(q, 'i');

            // iterate through the pool of strings and for any string that
            // contains the substring `q`, add it to the `matches` array
            $.each(strs, function(i, str) 
                if (substrRegex.test(str)) 
                    // the typeahead jQuery plugin expects suggestions to a
                    // javascript object, refer to typeahead docs for more info
                    matches.push( value: str );
                
            );

            cb(matches);
        ;
    ;

    $('#jobNumber').typeahead(
        hint: true,
        minLength: 2,
        highlight: true,
    ,
        

            name: 'projects',
            source: substringMatcher(projectNumbers.serializeArray()),
        );
);

我的输入框显示了前面的类型,但可用的数据是:

JobName1, JobName1, akhsfkh

substringMatcher 函数没有改变它。

有什么建议吗?

【问题讨论】:

【参考方案1】:

You cannot return results from a getJSON request like that

您必须存储结果并在回调中完成其余的工作。

var projectNumbers;
$.getJSON("http://jsbin.com/heyobi/1.json")
    .done(function (result) 
    projectNumbers = result;
    initTypeahead();
)
    .fail(function (jqXHR, textStatus, err) 
    alert('Error: ' + err);
);

var substringMatcher = function (strs) 
......
);

function initTypeahead() 
    $('.typeahead').typeahead(
        hint: true,
        minLength: 2,
        highlight: true,
    , 
        name: 'projects',
        source: substringMatcher(projectNumbers),
    );

这是DEMO

【讨论】:

以上是关于TypeaheadJS 方法未将数组转换为值的主要内容,如果未能解决你的问题,请参考以下文章

从 NSFetchRequest 将字典数组转换为值数组

对象键值对的形式 转换成对象组成数组的形式(键为值的形式)

对象键值对的形式 转换成对象组成数组的形式(键为值的形式)

二进制图片如何转化为值

JasperReports 未将 postgresql 时间戳转换为简单日期

求助:EF 未将对象引用设置到对象的实例