首页 文章

在markMatch上选择2 toUpperCase错误

提问于
浏览
1

所以我一直在使用select2进行非ajax查询,到目前为止它非常有用 . 但是,我想使用其中一个下拉列表来获取ajax json响应 . 在整个单片文档中,几乎没有发现如何使用它的tid位 .

单片文件:http://ivaynberg.github.io/select2/

除了正在编写的代码示例,几乎没有任何HTML代码或json示例,我现在正在亏损 .

所以这是我得到的一个json:

[{“ST_CD”:“NY”,“ST_SHRT_NM”:“纽约”},{“ST_CD”:“NY”,“ST_SHRT_NM”:“New York1”}]

这是非常标准的 . 我在文档中注意到你需要映射一个“id”和一个“text”来实现这一点 . 不知道为什么我不能这样做,但几乎没有任何文件 .

https://groups.google.com/forum/#!topic/select2/rDPFU0IWpE0

select2的作者提到了这些关键事实:

您需要在选项中提供id函数,因为您的id键是“Id”而不是“id” . 你还需要提供formatResult和formatSelection选项,因为你没有“text”键 .

在这里遇到同样问题的用户:https://github.com/ivaynberg/select2/issues/693也表明这是准确的 .

但是,这不适合我 .

$(document).ready(function () {
    $("#e6").select2({
        id: function(e) { return e.ST_CD },
        placeholder: "Search for a movie",
        minimumInputLength: 1,
        ajax: {
            url: "api/VendorLocation",
            dataType: 'json',
            data: function (term, page) {
                return {};
            },
            results: function (data, page) {
                return { results: data };
            },
            formatResult: function (item) { return item.ST_SHRT_NM; },
            formatSelection: function (item) { return item.ST_SHRT_NM; }
        }
    });
});

在返回ajax函数的结果部分时,数据对象被正确填充 . 它有我需要的数据(ST_CD和ST_SHRT_NM具有正确的值),当我继续时,那就是我得到错误 . 无论formatResult和formatSelection存在,都会显示相同的错误 .

所以我调试到Select2,这是出现错误的地方:

$.fn.select2.defaults = {
    (...)
    formatResult: function (result, container, query, escapeMarkup) {
        var markup = [];
        markMatch(result.text, query.term, markup, escapeMarkup);
        return markup.join("");
    },
    (...)
}

在此代码中,结果对象已填充,但text属性未定义 .

我认为格式化我的json数据以遵守前端html控件的标准或进行任何类型的json解析是非常不合理的 . 如果有一种方法,select2可以允许我明确指定文本和id部分,那么我想看到它或知道我做错了什么 .

1 回答

  • 4

    我问过这个问题已经有一段时间了但是在我问这个问题后一周我想出了一个解决方案 . 所以我现在决定回答它..刚刚创建了一个DTO,它映射到EF使用linq创建的实际实体:

    所以在服务器端:

    public class StateDTO
    {
        public string id { get; set; }
        public string text { get; set; }
    }
    

    然后在发回之前得到命中的查询

    //the context is generated from EF
    public IQueryable<StateDTO> Get(string st_name)
    {
        return (
            from state in this.context.States
            where state.ST_SHRT_NM.Contains(st_name)
            select new StateDTO() { id = state.ST_CD,
                                   text = state.ST_SHRT_NM,
                                 });
    }
    

    我得到以下结果:[{“id”:“NY”,“text”:“New York”},{“id”:“NY”,“text”:“New York1”}]

    因为我设置了select2配置,所以它在那之后工作:

    $(document).ready(function () {
        $("#e6").select2({
            placeholder: "Search for a movie",
            minimumInputLength: 1,
            ajax: {
                url: "api/States",
                dataType: 'json',
                data: function (term, page) {
                    return {};
                },
                results: function (data, page) {
                    return { results: data };
                }
            }
        });
    });
    

相关问题