2010-06-10 57 views
1

我创建的窗口是这样的:JavaScript的OOP问题

var obj = document.createElement('div'); 
obj.className = 'window'; 
obj.style.width = 300 + 'px'; 
obj.style.height = 200 + 'px'; 
obj.style.left = 30 + 'px'; 
obj.style.top = 200 + 'px';  

//and so on 

和我需要的是一些数据附加到每个窗口。数据将通过Ajax抓取并显示在窗口中。我应该怎么做才能让每个窗口保持自己独特的数据?

我不需要每次都显示整个数据以及这些数据需要在显示前组织,所以我不能只是innerHTML添加。我需要一种方法来保存到其他地方,我可以很容易地得到它,然后用innerHTML显示。

+1

欢迎SO,请访问http://stackoverflow.com/faq – Reigel 2010-06-10 04:34:39

回答

0

胡乱猜测 -

obj.data = 'Whatever' 

后来

obj.innerHTML = format(obj.data); 

我在Firebug的控制台尝试这样做,在那里工作。也许值得在别人尝试?

1

只需使用

obj.data = yourData; 

获取数据使用obj.data

+3

事情是大小写敏感的,所以你的意思是 “obj.data”,而不是 “obj.Data” – Pointy 2010-06-10 04:37:29

+0

@Pointy是的! ,谢谢:d – Fopfong 2010-06-10 05:03:17

+0

+1最直接的方法 – 2011-07-04 16:56:02

1

你可以使用jQuery? jQuery有一种叫data所以在您的例子,你可以这样做:

var obj = $('<div></div>'); 
obj.addClass('window'); 
obj.data('foo', 'setting some data here'); 

您可以访问后您的数据:

obj.data('foo') // will return 'setting some data here' 
+0

+1耶! jQuery的一切..;) – Reigel 2010-06-10 04:48:43

0

你可以建立自己的constructor function创建自己窗口对象并在每个实例上存储DOM元素和数据,例如:

function MyWindow (width, height /*, ...*/) { 
    var data = {}; // here the data will be stored 
    // the DOM element 
    this.element = document.createElement('div'); 
    this.element.className = 'window'; 
    //... 
    // a method for get and set key/value pairs: 
    this.data = function (key, value) { 
    if (typeof value == 'undefined') { 
     return data[key]; 
    } else { 
     data[key] = value; 
     return this; 
    } 
    }; 
} 

MyWindow.prototype.sharedMethod = function() { 
// shared across all instances, you can access here public members 
// like the `this.data` method and the `this.element` DOM element 
}; 

示例us年龄:

var win1 = new MyWindow(300, 200); 
win1.data('key1', 'value1').data('key2', 'value2'); // chainable method :) 

// to access the DOM element: 
win1.element; 

// to get the values 
win1.data('key1'); // "value1" 
win1.data('key2'); // "value2" 

var win2 = new MyWindow(300, 200); 
win2.data('someData', {foo: 'bar', baz: true}); 
win2.data('someData').foo; // "bar"