At.js提到回调和重复

时间:2015-02-21 23:59:56

标签: javascript jquery callback inline mention

At.js的任何经验可以提供帮助吗?我试图:

  1. 在数组中获取插入的提及,以便可以使用PHP
  2. 处理它们
  3. 防止重复输入(不知道从哪个开始)
  4. 使用Javascript和jQuery的经验很少,所以任何帮助表示赞赏。仅供参考我使用At.js和惊人的Froala WYSIWYG Editor

    以下是我要获取标签的内容,但我不确定如何将其添加到数组中。

    $(function(data){   
       $('#postTagsInput').atwho({
           at: '@', 
           data: 'URL'
    });
    
    $('#postTagsInput').on("inserted.atwho", function($li, query) {
       console.log(query);
    
       var postTags = query;
       $('#myResults').html(postTags);      
      });      
    });
    

2 个答案:

答案 0 :(得分:3)

我通过为插入的名称使用自定义“ insertTpl ”解决了这个问题:

var at_config = {
    at: '@',
    data: mentionablesList,
    displayTpl: '<li><span>${name}</span></li>',
    insertTpl: '<a href="${url}" data-type="mentionable" data-id="${id}" data-name="${name}">${name}</a>'
};

$(that.document.getBody().$)
    .atwho('setIframe', that.window.getFrame().$)
    .atwho(at_config);

然后使用jQuery解析输入值并提取所有提到的名称:

var commentHtml = CKEDITOR.instances['new-comment'].getData();
var comment = $('<div/>').html(commentHtml).contents();

comment.find('a[data-type="Employee"]').each(function(index, element) {

    // do whatever you need with $(element) object

});

注意:我在我的案例中使用了CKEditor - 一个评论框,允许用户在撰写评论时提及其他用户的姓名。评论发布后,所有提及的名称将被添加到评论所属帖子的关注者列表中。

答案 1 :(得分:2)

通过使用At.js默认回调或JQuery在表单提交后解析值,您可以将它们推送到数组中。

这是选项#1的伪代码。人是你提到的人群。您需要将调试器放入before插入中以查找嵌套值的位置。 (这取决于你的json响应的结构。)

$(function(data){   
   $('#postTagsInput').atwho({
       at: '@', 
       data: 'URL',
       callbacks:
         beforeInsert: function(value, $li) {
         //debugger here to figure out where your data value is
         people.push(value.thing_to_insert);
       }
});

这种方法有效,但前提是你不关心有人会改变他们之后提到的想法,因为它会在你选择时插入你的提及。如果你想让它更灵活,那么使用JQuery解析textarea中的名称,有点像这样:

mentionsString = $("#textarea_id").val();
mentions = mentionsString.split(' ');

然后您可以使用TwitterText从该数组中解析出@mentions。 https://github.com/twitter/twitter-text

如果您希望它们是唯一的并且您没有使用框架,则必须通过您的数组并解析重复项。更好的是,使用Ember并且它具有内置于Array方法的uniq:)