JavaScript, доступ к object.property - PullRequest
       0

JavaScript, доступ к object.property

0 голосов
/ 23 февраля 2012

В моем коде this.options возвращает объект с вложенным .all объектом. Тем не менее, когда я пытаюсь получить к нему доступ с помощью this.options['all'] или this.options.all, я получаю undefined.

console.log(this.options):

Object
    all: Object
        cfg_autoresize: "true"
        cfg_autosave: "false"
        cfg_monthly_target: "monthly_target"
        cfg_statistics: "statistics"
        cfg_ticker: "ticker"
        cfg_yearly_target: "yearly_target"
    __proto__: Object

Может ли кто-нибудь помочь мне понять это, никогда раньше не было этой проблемы. Спасибо

Edit:

content_script, упрощенная версия

var Dashboard = Backbone.View.extend({
    el: $('body'),
    options: {},

    get_localStorage: function() {
        var _this = this;
        function handle_response(response) {_this.options.all = response.data;}
        chrome.extension.sendRequest({method: "allLocalStorage"}, handle_response);
    },

    initialize: function() {
        this.get_localStorage();
        console.log(this.options); // above object
        console.log(this.options.all); //undefined
    }
});

background.html, взято из документации по Google-chrome-extension и изменено

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.method == "allLocalStorage") {

        var options = {};

        for (var i=0, l=localStorage.length; i<l; i++){
            var key = localStorage.key(i);
            var value = localStorage[key];
            options[key] = value;
        }

        sendResponse({data: options}); 

    } else {
        sendResponse({}); 
    }
});

В идеале я бы хотел, чтобы в this.options были все опции без .all, но это не сработало бы для меня.

1 Ответ

1 голос
/ 23 февраля 2012

Можете ли вы показать нам часть кода js (объявление и доступ к объекту), который кажется неправильным?

EDIT:

Ах, я вижу ... во время вызова get_localStorage (); объект может не инициализироваться из-за того факта, что функция handle_response еще не сработает до завершения sendRequest.

Вы, вероятно, хотите попробовать что-то вроде следующего:

get_localStorage: function(callback) {
    var _this = this;
    function handle_response(response) {
        _this.options.all = response.data;     
        callback(_this.options);
    }
    chrome.extension.sendRequest({method: "allLocalStorage"}, handle_response);
}

initialize: function() {
    this.get_localStorage(function(op) {
            console.log(op);
            console.log(op.all);
        }
    );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...