Я пишу расширение Chrome, которое должно взаимодействовать с поддеревом закладок.Существует много взаимодействий с этим поддеревом, поэтому я абстрагирую эту логику в литерал объекта, например:
var contextStore = {
'root_id': undefined,
'setup': function() {...}, // populates root_id
'add': function(name) {...}, // uses root_id
'remove': function(name) {...}, // uses root_id
// ... etc ...
};
contextStore.setup(); // only once.
contextStore.add("foo");
contextStore.add("bar");
// ... etc
Пока все хорошо.
Проблема у меня 'Это вызвано асинхронными API Chrome (и моим отсутствием JS-fu).То есть:
var contextStore = {
'root_id': undefined,
'setup': function() {
chrome.bookmarks.getTree(function(tree) {
// do some work to find a given folder in bookmarks.
// now I want to save that folder's id for access in other methods.
// Fail: 'this' refers to chrome.bookmarks.getTree.
this.root_id = computed_thing; // doesn't work!
});
}
// ... etc ...
};
Мой вопрос:
Как мне получить доступ к элементам литерала вмещающего объекта из различных обратных вызовов методов API Chrome?
Iрассмотрел использование шаблона модуля, но, похоже, он ничего не меняет, и не похоже, что этот код будет использоваться чем-либо за пределами расширения.