0

我在这里所做的是某种与您的在线和离线联系人的聊天界面,您可以在窗口周围拖动。我一直在尝试创建一个函数来检查您是否已经打开了一个聊天窗口以避免重复的窗口。这是我到目前为止得到的链接。s2.enigmind.com/jgonzalez/nodeChat 我希望你们能看到它。

这是我在其中附加窗口元素的函数,该函数获取我从 JSON 获得的一些参数,这些参数是用户 ID 名称和状态。

function displayChatWindow(user, status, avatar, id){
    var template = _.template($("#windowTemplate").html(), {userName: user, userStatus: status, userAvatar: avatar, userId: id});
    stackingWidth = stackingWidth - boxWidth;
    /*console.log(stackingWidth);*/
    $("body").prepend(template);
    $(".messages-container").slimScroll({
        height: '200',
        size: '10px',
        position: 'right',
        color: '#535a61',
        alwaysVisible: false,
        distance: '0',
        railVisible: true,
        railColor: '#222',
        railOpacity: 0.3,
        wheelStep: 10,
        disableFadeOut: false,
        start: "bottom"     
    });
    $("#" + id).css({
        top: absoluteY,
        left: stackingWidth
    });
    $("#" + id).find(".minimize").on("click", displayOthersChat);
    $(".chat input, .chat textarea").on("focus", cleanInputs);
    $(".chat input, .chat textarea").on("blur", setInputs);
    addWindow(id, stackingWidth);
}

我在全局范围内拥有的是一个名为的数组var openedWindows = [];,在这个数组中,我使用 addWindow 函数附加用户 ID 和位置。

function addWindow(id, offset){
    openedWindows.push({
        id: id,
        offset: offset
    })
}

到目前为止,每次我打开一个新窗口时,都会将这个窗口添加到数组中,我一直在使用 for 循环来查看用户和 id 是否已经在数组中,但我实际上并不知道如何构造我的代码,因为第一次无法检查用户是否在数组中,因为数组是空的,如果你们知道我如何实现这一点,我将不胜感激,我知道我的代码不是最好的,所有这些是为了我的学习目的,所以我接受各种提示!非常感谢。

4

1 回答 1

1

您已经在使用 underscore.js ,所以为什么不使用它的_.each()函数来遍历所有条目openedWindows

function addWindow(id, offset) {
    var found = false;

    _.each(openedWindows, function(el, idx) {
        // 'el' is an item in openedWindows, and 'idx' is its position in the array
        if (el.id === id) {
            found = true;
        }
    });

    if (found === false) {
        openedWindows.push({
            id: id,
            offset: offset
        });
    }
}
于 2013-06-11T20:00:32.713 回答