2010-11-27 22 views
1

Ich versuche, eine Slideshow auf meiner Seite zu erstellen, die aus mehreren Gruppen (Kategorien) von Bildern besteht, die in der Slideshow enthalten sind, wenn ein bestimmtes Kontrollkästchen (eine für jede Kategorie) auf der Seite aktiviert ist. Ich habe dies erfolgreich mit zwei Kategorien codiert, versuche aber, den Code leichter anpassbar zu machen. Ich hatte die geniale Idee, benutzerdefinierte Objekte anstelle von Arrays zu verwenden. Ich gehe davon aus, dass ich mit diesem Ansatz auch meinem endgültigen Ziel, ein XML-Dokument zu verwenden, näher kommen würde.Array von Objekten mit Arrays möglich?

Ich bin ziemlich neu in der objektorientierten Programmierung, vor allem mit Javascript. Ich habe erfolgreich eine Erklärung von Objekten zur Verwendung in einer Diashow-Seite mit dem folgenden Code erstellt:

function picsobj(description,length,indivpicarray){ 
    this.description=description; 
    this.length=length; 
    this.indivpicarray=indivpicarray; 
} 

und anderswo der folgende Code ein Array von picsobj

for(i=0;i<2;i++){ //change i< integer to number of picture arrays 
    picarrays[i]=new picsobj();} 

die Plan-Objekten zu machen, ist die Verwendung Die Beschreibung Eigenschaft für Beschriftungen oder Elemente auf der Seite zu beschreiben, um die Länge Eigenschaft zu verwenden, um zu bestimmen, wie viele Bilder durchlaufen werden, und zu verwenden (hier ist, wo meine Frage kommt ...) die Objekteigenschaft namens indivpicarray zum Speichern eines ARRAY von Bildnamen (die Länge des Arrays würde sich von Picsobj zu Picsobj ändern). Ich weiß nicht, ob das möglich ist, und wenn es so ist, brauche ich bitte Hilfe bei der Syntax. Danke für das Lesen meiner Frage. ich bin ein bisschen wie ein n00b wieder, sorry, wenn es irgendwelche missbräuchlich verwendeten Worte sind und haben ziemlich viel gelernt durch „Quelltext anzeigen, kopieren, einfügen, ändern“

+0

ich Ihren Anfang Entschuldigungen dafür, ein „n00b“ entfernt, da dies eine gut formulierte und gültige Frage. :) –

Antwort

3

und zu verwenden, um die Objekt-Eigenschaft namens indivpicarray hilft ein Array von Bildnamen zu speichern.

Das ist völlig in Ordnung. Die Technik von Objekten mit Eigenschaften, die Arrays sind, ist ziemlich üblich. Arrays werden wie jede andere Variable behandelt.fügen Sie diese einfach in Ihrem Konstruktor:

function picsobj(description,length,indivpicarray){ 
    this.description=description; 
    this.length=length; 
    this.indivpicarray=indivpicarray; 
} 

imageNameArray = [ "image1.png", "image2.gif", "image3.jpg" ]; 
var myPicsObj = new picsobj("this is the description", 3, imageNameArray); 

see here if you're not sure what a constructor is

0

In Javascript ist alles möglich:

this.description = ["a","b","c"]; 

Sie haben ein Array von 3 Elementen, die Strings sind. In der realen Welt würde man es definieren als this.description = []; dann so etwas wie:

picarrays[i].description.push("a"); 
picarrays[i].description.push("b"); 
picarrays[i].description.push("c"); 

Sie effektiv die gleiche Anordnung geben und Sie können eine Schleife durch .beschreibung alle Fäden in der Matrix zu erhalten. Möglicherweise benötigen Sie auch keine Länge, da description.length die Anzahl der Elemente in der Beschreibung angibt.

0

Ja, das ist möglich. Sie könnten zum Beispiel, es auf diese Weise tun, wenn Sie bereits die Werte wissen, wann es die Programmierung:

var picarrays=[{description:"bla","length":1234,"indivpicarray":["a","b","c"]}, 
       {description:"blah","length":145,"indivpicarray":["a","c","g"]}]; 

Dies Ihnen ein Array von Objekten von Arrays gibt.

0

Es gibt ein Objekt namens Array in JavaScript, das genau das tun soll, was Sie brauchen. Beispiele auf http://www.w3schools.com/JS/js_obj_array.asp, oder einfach nur google „Javascript-Array“

Hoffnung, die

+0

Das Plakat weiß das schon. Er sucht nach einer Möglichkeit, benutzerdefinierte Objekte in das Array einzufügen/zu schieben, anstatt die eingebauten einfachen Typen. – Philar

0
/* The function constructor of your objects usually use a capitalized names 
* */ 
var Picsobj = function(description,indivpicarray){ 
    this.description=description; 
    this.indivpicarray=indivpicarray; 
}; 
/* Is better convert length to a method instead a property passed to the constructor. */ 
/* The methods are attached to the prototype propertie of the constructor. `this` refers to 
* the actual object where the method is called. 
* */ 
Picsobj.prototype.getLength = function() { 
    if(typeof(this.indivpicarray) != 'object') 
    return 0; 
    return this.indivpicarray.length; 
}; 


/* Example */ 
var pic = new Picsobj('Description of pic', ['pic1.jpg','pic2.jpg']); 
var anotherPic = new Picsobj('Description of anotherPic', ['anotherPic1.jpg','anotherPic2.jpg']); 
console.log(pic.getLength()); 
console.log(anotherPic.getLength()); 
Verwandte Themen