任何人都可以在At.js有一點經驗?At.js的兩位聽衆
我現在有最奇怪的錯誤。我已檢查並重新檢查了所有內容100次。
我將2個監聽器分配給一個表單。 1使用「@」符號提取用戶,另一個使用「事件:」文本提取事件。
「tagUsersConfig」選項效果很好,但「tagEventsConfig」表現怪異。它獲取前5個事件,然後只要我開始鍵入第一個字母,這個列表就消失了,即使我知道一個事實(在控制檯中),對於我輸入的每個字符,它都會將我正確的JSON對象從API(所有這些都是準確的,取決於打字的字母)。
如果我將用戶的API查詢粘貼到tagEventsConfig(事件)中,則「event:」現在可以使用。最奇怪的部分是(你將不得不接受我的話),事件API調用和它的變量都是完全正確和有效的。
理論:我想這一切已經與匹配回調做,但我不明白爲什麼,因爲用戶的名稱和事件的名稱有相同的預期結構(空間,有時特殊字符)。
var userList;
var eventList;
var tagUsersConfig = {
at: "@",
displayTpl: "<li class='replyToAtWho-list-item clearfix'><div class='feed-replyTo-img' style='${imageId}'></div><div class='left'><div class='feed-replyTo-name'>${name}</div><div class='feed-replyTo-realName'>${realName}</div></div></li>",
insertTpl: '<span class="feed-reply-to-name-link" data-userNameReplyTo="${name}" data-userIdReplyTo="${userId}">${name}</span> ',
callbacks: {
remoteFilter: function(query, render_users) {
$.getJSON(DOMAIN + '/Skeddy/rest/gem/v1/user?institutionid='+CAMPUS_ID+'&apitoken='+USER_TOKEN+'&limit=10&fullname=' + encodeURIComponent(query), function(data) {
userList = $.map(data.listT, function(value, i) {
var imageId = (parse_OBJ(value.i, "ImageId")) ? DOMAIN + '/Skeddy/rest/gem/v1/image/' + parse_OBJ(value.i, "ImageId") + '?sname=CampusSchema&apitoken=' + USER_TOKEN : '/' + ROOT + '/img/avatar-default.png';
return {
'userId': value.id,
'realName': value.name,
'name': parse_OBJ(value.i, "firstName") + " " + parse_OBJ(value.i, "lastName"),
'imageId' : 'background-image : url("' + imageId + '")'
};
});
render_users(userList);
});
},
matcher: function(flag, subtext, should_start_with_space) {
var match, regexp;
flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
if (should_start_with_space) {
flag = '(?:^|\\s)' + flag;
}
regexp = new RegExp(flag + '([A-Za-z0-9_\\s\+\-\]*)$|' + flag + '([^\\x00-\\xff]*)$', 'gi');
match = regexp.exec(subtext.replace(/\s/g, " "));
if (match) {
return match[2] || match[1];
} else {
return null;
}
}
},
delay: 20
};
var tagEventsConfig = {
at: "event:",
displayTpl: "<li class='itemAtWho-list-item clearfix'><div class='feed-item-img' style='${imageId}'></div><div class='left'><div class='feed-item-name'>${eventName}</div><div class='feed-replyTo-realName'>10-10</div></div></li>",
insertTpl: '<a href="' + DOMAIN + '/website/event-details/' + CAMPUS_ID + '/${eventId}" class="fp-ext-link" target="_blank">${eventName}</span> ',
callbacks: {
remoteFilter: function(query, render_events) {
$.getJSON(DOMAIN + '/Skeddy/rest/gem/v1/event?institutionid='+CAMPUS_ID+'&apitoken='+USER_TOKEN+'&limit=10&state=published_expired&name=' + encodeURIComponent(query), function(data) {
eventList = $.map(data.listT, function(value, i) {
var imageId = (value.imageId) ? DOMAIN + '/Skeddy/rest/gem/v1/image/' + value.imageId + '?sname=CampusSchema&apitoken=' + USER_TOKEN : '/' + ROOT + '/img/avatar-default.png';
return {
'eventId': value.eventId,
'eventName': value.name,
'imageId' : 'background-image : url("' + imageId + '")'
};
});
render_events(eventList);
});
},
matcher: function(flag, subtext, should_start_with_space) {
var match, regexp;
flag = flag.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
if (should_start_with_space) {
flag = '(?:^|\\s)' + flag;
}
regexp = new RegExp(flag + '([A-Za-z0-9_\\s\+\-\]*)$|' + flag + '([^\\x00-\\xff]*)$', 'gi');
match = regexp.exec(subtext.replace(/\s/g, " "));
if (match) {
return match[2] || match[1];
} else {
return null;
}
}
},
delay: 20
};
$POST_FORM_MASTER.find(".feed-form.mention").atwho(tagEventsConfig).atwho(tagUsersConfig);
非常感謝您的時間。