Каковы приемлемые шаблоны для ссылки на экземпляр на странице? - PullRequest
2 голосов
/ 01 марта 2011

Я ищу шаблоны, которые были сочтены приемлемыми при работе с экземплярами объектов js на той же странице. (Если есть нить, уже охватывающая это, ссылка будет оценена.)

Вопрос является одним из справочных. После того, как объект / объект создан, на него нужно ссылаться в какой-то момент позже.

Я видел, как люди jQuery хранят ссылку на объект на целевом элементе DOM, используя data(). Тем не менее, меня интересует вариант, не зависящий от фреймворка, если это возможно.

Этого можно достичь, если бы существовал чистый, жизнеспособный способ генерирования уникального идентификатора для элемента DOM. Увы, я еще не нашел.

Итак, мой вопрос: каков наилучший способ хранения ссылки на объект через элемент DOM, чтобы вы могли ссылаться на него в будущем в произвольное время?

Надеюсь, это имеет смысл, и я не просто болтаю. :)

Спасибо.

Ответы [ 2 ]

5 голосов
/ 01 марта 2011

Ничто не мешает вам поддерживать собственный кеш:

var cache = [];

function locate(el) {
    // search for the element within our cache.
    for (var i=0;i<cache.length;i++) {
        if (cache[i].elem === el) {
            return cache[i].data;
        };
    };

    // if we get this far, it isn't in the cache: add it and return it.
    return cache[cache.push({
        elem: el,
        data: {}
    }) - 1].data;
};

// used to add data to an element and store it in our cache.
function storeData(el, data) {
    var store = locate(el);

    for (var x in data) {
        store[x] = data[x];
    };
};

// used to retrieve all data stored about the target element.
function getData(el) {
    return locate(el);
};

, а затем используйте следующее:

storeData(document.getElementById("foo"), {
    something: 4,
    else: "bar"
});

var data = getData(document.getElementById("foo"));
alert(data.something); // "4";
0 голосов
/ 01 марта 2011

Объекты в JavaScript (в отличие от классических языков ООП) могут быть дополнены. В этом нет ничего плохого; Вот как JavaScript был разработан для использования:

Запись:

document.getElementById ('foo') .customAttribute = 5;

Читать:

alert (document.getElementById ('foo') .customAttribute);

Если вы не хотите изменять исходный объект, единственный способ указать на него - использовать словарь, как указано в одном из предыдущих ответов; однако вам не нужно выполнять линейный поиск, чтобы найти объект: это можно сделать в логарифмическом времени, если вы используете идентификатор для элемента (возможно, не его HTML-идентификатор, а пользовательский)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...