将Select2与Laravel 4 App集成

时间:2013-08-12 09:27:02

标签: javascript ajax laravel laravel-4 jquery-select2

我决定在我的多选搜索过滤器中实现select2,我可以帮忙整合它。

我有以下方法:

public function getContactByName($name)
{
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}

此方法返回“first_name”和“last_name”类似于在网址中输入的字词的所有记录,例如http://www.example.com/admin/get-contact-name/ {name}。

以下路由处理请求:

Route::get('admin/get-contact-name/{name}', 'AdminContactListController@getContactByName');

这一切都很棒。我只需要一些帮助来设置select2和AJAX。我不确定在JS的选项中放什么。

我有以下表单字段设置:

<input name="contact_names_value" type="text" class="input-medium contact_names_value" id="contact_names_value">

任何人都可以指出我正确的方向。欢呼声。

编辑:我喜欢在这里玩,在黑暗中拍摄,因为我不确定每个元素的含义,例如页面等,但这是我的代码到目前为止,足以说它不起作用了:

var name = $('#contact_names_value').val();
$('#contact_names_value').select2({
    placeholder: 'Search contacts',
    minimumInputLength: 3,
    ajax: {
        url: '/admin/get-contact-name' + name,
        dataType: 'json',
        data: function (term, page) {
            return {
                q: term,
                page_limit: 10
            };
        },
        results: function (data, page) {
            return {results: data};
        }
    },
});

编辑:好的伙计们,我想我离我更近了,我想我现在通过select2获得了结果,但我收到了一个JavaScript错误。这是我到目前为止所拥有的。

方法:

public function getContactByName()
{
    $name = Input::get('name');
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as name')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}

路线:

Route::get('admin/get-contact', 'AdminContactListController@getContactByName');

Select2 JavaScript:

$('#contact_names_value').select2({
    name: $('.select2-input').val(),
    placeholder: 'Search contacts',
    minimumInputLength: 3,
    ajax: {
        url: '/admin/get-contact' + name,
        dataType: 'json',
        data: function (term) {
            return {
                name: term
            };
        },
        results: function (data) {
            return {results: data};
        },
        dropdownCssClass: 'bigdrop'
    },
});

Select2 JS错误:

Uncaught TypeError: Cannot call method 'toUpperCase' of undefined plugins.js:1549
C plugins.js:1549
a.fn.select2.defaults.formatResult plugins.js:1550
g plugins.js:1549
a.extend.populateResults plugins.js:1549
f.query.callback plugins.js:1549
(anonymous function) plugins.js:1549
a.extend.success plugins.js:1549
c jquery-1.9.1.min.js:3
p.fireWith jquery-1.9.1.min.js:3
k jquery-1.9.1.min.js:5
r

任何建议人员?

2 个答案:

答案 0 :(得分:1)

好的,我现在的工作就像一个魅力。

这是我的JS代码:

$('#contact_names_value').select2({
    placeholder: 'Search contacts',
    minimumInputLength: 3,
    ajax: {
        url: '/admin/get-contact',
        dataType: 'json',
        data: function (term, page) {
            return {
                contact_names_value: term
            };
        },
        results: function (data, page) {
            return {results: data};
        }
    },
    tags: true
});

我不需要'name'变量引用,因为插件处理它并将select / input的值附加到查询字符串。

其次,在我的表单中,我需要将类型设置为“隐藏”,就像之前的文本一样。

您还会注意到,我在结果和数据功能中添加了“页面”。不确定这是否有所作为。

我还添加了'tags:true',使其像多选一样工作。

这是我的方法代码:

public function getContactByName()
{
    $name = Input::get('contact_names_value');
    return Contact::select(array('id', DB::raw('concat(first_name," ",last_name) as text')))->where(DB::raw('concat(first_name," ",last_name)'), 'like', "%$name%")->get();
}

请注意,在我的select语句中,我执行DB :: raw并将'first_name'和'last_name'字段设置为'text'。我认为这是主要问题之一,因为插件需要“id”和“text”才能运行。

我的路线很简单:

Route::get('admin/get-contact', 'AdminContactsController@getContactByName');

答案 1 :(得分:0)

您只需抓住输入框(例如,使用jQuery,您可以执行$(&#39;#contact_names_value&#39;)或javascript是document.getElementById(&#39; contact_names_value&#39;)。)

应该有效的例子:

$('#contact_names_value').select2(your_value_from_getContactByName_method_here);

希望有所帮助。