如何使用JavaScript和Firefox Add-on SDK动态添加HTML元素

时间:2013-08-07 14:24:40

标签: javascript jquery httprequest firefox-addon-sdk

我正在使用Firefox SDK开发一个简单的附加组件,允许用户查看存储的数据。 我想在带有表格的面板中显示这些项目。该表是使用从数据库传入的数据动态创建的。首先,在JavaScript代码中我创建了具有属性的项目,然后我创建了一个属性为行的表,并且我将每个属性的值附加到项目中。

我遇到了一些问题:表中只有项目的名称作为第一行,属性名称作为第一列而没有单元格中的值。似乎代码没有按顺序执行,但似乎首先执行更快的函数。

这是代码:

       self.on('message', function() {
        var container = $('#container');
        container.empty();
        items = [];
        self.port.emit('getItem');
    });

    self.port.on('items', function(response) {
        var ok = 0;
        var items = [];
        var table = $('#tableContainer #table').clone();
        var container = $('#container');

        table.append("<tr id=first><th>    </th></tr>");
        var json = eval('('+ response + ')');
        for (var i = 0, len = json.length; i < len; ++i) {
            var item = {
                id: json[i],
                properties: []
            };
            items.push(item);
        }
        items.forEach ( function(item) {    
            table.find('#first').append("<th id="+item.id+">"+item.id+"</th>");

            self.port.emit('detailsItem', item.id);
            self.port.on('details'+item.id,  function(response) {
                var details = eval('('+ response + ')');
                var description = [];
                ndet = details.length;
                var len = details.length;
                for (var i = 0; i < len;) {
                    var detail = {
                        dimension : details[i].dimension,
                        value : details[i].value
                    }
                                    description.push(detail);
                    ++i;
                }
                item.properties = description;  
            });
            });
        self.port.emit('getDimension'); 
            self.port.on('dimension', function(response) {
                var dimensions = eval('('+ response + ')');
                for(var cont = 0, l = dimensions.length; cont < l; ++cont) {
                    table.append("<tr id=dimension"+cont+"><td>"+dimensions[cont]+"</td></tr>");    

                    items.forEach( function(item) {
                        var prop = [];
                        prop = item.properties;
                        var lun = prop.length;
                        for( var p =0;p < lun;) {
                            if(item.properties[p].dimension == dimensions[cont]) {                              table.find('#dimension'+cont).append("<td>"+item.properties[p].value+"</td>");
                            }
                            else {
                                table.find('#dimension'+cont).append("<td> --- </td>");
                            }
                            ++p;                        }

                    });

                };
        });

            container.append(table);

        });

0 个答案:

没有答案