如何在MentionsInput.js中使用模板?

时间:2015-04-24 14:10:51

标签: javascript jquery templates mention mentionsinput.js

  

注意:这可能是模板插件jQuery.mentionsInput的列表项的功能的文档。所以我请求用户,不要关闭这个或删除这个问题。 TIA。

我在我的项目中使用jQuery.mentionsInput。一切正常。我用这个来调用插件:

$(".mention").mentionsInput({
    onDataRequest: function (mode, query, callback) {
        $.getJSON('/usersList', function(responseData) {
            responseData = _.filter(responseData, function(item) { return item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 });
            callback.call(this, responseData);
        });
    }
});

/usersList的来源如下:

[
    {
        "id": "Praveen",
        "name": "Praveen Kumar",
        "avatar": "/img/users/1.jpg",
        "type": "user"
    },
    {
        "id": "jeff",
        "name": "Jeff Atwood",
        "avatar": "/img/users/2.jpg",
        "type": "user"
    },
    {
        "id": "pekka",
        "name": "Pekka Gaiser",
        "avatar": "/img/users/3.jpg",
        "type": "user"
    },
    {
        "id": "billgates",
        "name": "Bill Gates III",
        "avatar": "/img/users/4.jpg",
        "type": "user"
    }
]

如果可以看到,则每个用户都有一个全名(name)和一个用户名(id)。我希望插件能够显示用户名和全名,所以我对JSON进行了修改,如下所示:

"name": "Praveen Kumar (@Praveen)",

但是这会在textarea中产生如下效果:

  

您好Praveen Kumar (@Praveen),你好吗?

而不是显示如下:

  

您好Praveen Kumar,你好吗?

我希望仅在建议发生时显示,而不是在插入文本框期间显示。我知道这可以使用templates进行更改,但是在他们的网站上没有任何文档。有人可以帮忙吗?我正在使用这个:

templates: {
    wrapper: _.template('<div class="mentions-input-box"></div>'),
    autocompleteList: _.template('<div class="mentions-autocomplete-list"></div>')
}

这部分的任何提示?提前谢谢。

1 个答案:

答案 0 :(得分:3)

最后我发现了它。我必须做以下事情:

  1. 添加template项:autocompleteListItem
  2. 通过在autocompleteListItem旁边添加(@<%= id %>)来修改<%= content %>以包含ID。
  3. 要根据ID显示搜索内容,请在return功能的_.filter中添加以下内容。

    return (
       item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 ||
       item.id.toLowerCase().indexOf(query.toLowerCase()) > -1 // Add this ID part too!
    )
    
  4. 希望这对某人有帮助。目前,我正在使用此代码:

    $(".mention").mentionsInput({
        onDataRequest: function (mode, query, callback) {
            $.getJSON('/usersList', function(responseData) {
                responseData = _.filter(responseData, function(item) { return (item.name.toLowerCase().indexOf(query.toLowerCase()) > -1 || item.id.toLowerCase().indexOf(query.toLowerCase()) > -1) });
                callback.call(this, responseData);
            });
        },
        templates: {
            autocompleteListItem: _.template('<li data-ref-id="<%= id %>" data-ref-type="<%= type %>" data-display="<%= display %>"><%= content %> (@<%= id %>)</li>')
        }
    });