2016-07-13 9 views
0

Ich weiß nicht, ob ich es richtig mache oder irgendwelche guten Praktiken benutze, aber ich versuche, Ansichten zu meiner Ansicht zu verlangen und hinzuzufügen.Erfordern Sie eine Ansicht und fügen Sie mit einer Variablen hinzu (Appcelerator Alloy)

aber hier habe ich einen Blick Container in meinem index.xml

<View id="containerDays" layout="vertical" height="Titanium.UI.SIZE"> 
    <Require id="requiredDay" src="NewDay"/> 
</View> 
<Label id="buttonAddDay" class="button" >Adicionar outro dia</Label> 

auch auf dem index.js ich habe:

$.buttonAddDay.addEventListener("click", addNewDay); 
function addNewDay() { 
    var novoDia = $.getView("NewDay"); 
    $.containerDays.add(novoDia); 
} 

auch habe ich die Ansicht hier in einem anderen Ordner auf:

/app/views/NewDay.xml 

und im Inneren dieser Ansicht ist ein einfaches Eingabe

<Alloy> 
    <View class="containerNewDay" layout="vertical" height="Titanium.UI.SIZE"> 
    <TextField id="Day" >write a new day</TextField> 
    </View> 
</Alloy> 

so Summieren alles auf,

  1. Ich versuche, meinen $ .containerNewDay in meinem $ .containerDay hinzufügen, aber ich habe keinen Erfolg mit dem getView() oder der .open()

  2. Ich werde alle Textfelder verwenden müssen, um es an einen Server zu senden, wie kann ich die IDs einstellen, aber leider habe ich keine Idee, wie das auf Appcelerator zu tun.

Antwort

1

Re die Antwort oben, werden auch Sie die .add Methode von Ihrem ursprünglichen Code-Block? so soll es sein:

$.buttonAddDay.addEventListener("click", addNewDay); 

function addNewDay() { 
    var novoDia = Alloy.createController("NewDay").getView(); 
    $.containerDays.add(novoDia); 
} 

oder besser wäre:

function addNewDay() { 
    $.containerDays.add(Alloy.createController("NewDay").getView()); 
} 

, da dies keinen Zeiger offen für die Ansicht verlassen.

wenn man will es noch sauberer machen:

$.buttonAddDay.addEventListener("click", function addNewDay() { 
    $.containerDays.add(Alloy.createController("NewDay").getView()); 
}); 

oder wenn Sie wollen eine „reine“ Alloy Art und Weise halten, dann lassen Sie die addNewDay Funktion vorhanden und nur einen onClick hinzufügen = "addNewDay" Handler in der Schaltfläche XML.

Entscheidend ist, denken Sie daran, dass Sie Ihre haltige Ansicht benötigen ContainerDays ein Layout horizontalen oder Ihren zusätzlichen Ansichten zu haben, wird einfach auf die aufeinander sitzen.

+0

IT löste mein Problem 1, das zweite Problem, den Wert jedes newDay zu bekommen, habe ich noch keine Ahnung. –

+0

Re 2 - Wenn Sie nach dem Wert des Textfelds suchen, können Sie die Add-Funktion ändern, so dass Sie einen Zeiger auf den NewDay-Controller erstellen, dann ein Array von Zeigern auf die Textfelder speichern, so dass jedes Textfeld auf das Array - - Am Ende haben Sie ein Array, das Sie durchlaufen könnten – jasonkneen

+0

Eine andere Option für 2. ist, die Kinder von $ .containerDays zu iterieren und dann das erste Kind jedes Ergebnisses zu bekommen (was das Textfeld wäre). – jasonkneen

0

Wechsel:

$.buttonAddDay.addEventListener("click", addNewDay); 
    function addNewDay() { 
     var novoDia = $.getView("NewDay"); 
    } 

An:

$.buttonAddDay.addEventListener("click", addNewDay); 
function addNewDay() { 
    var novoDia = Alloy.createController("NewDay").getView(); 
} 
+0

hi, es hat nicht für mich funktioniert, ich habe meinen Beitrag bearbeitet und eine Zeile für diese Funktion hinzugefügt Funktion addNewDay() { var novoDia = Alloy.createController ("NewDay"). GetView(); $ .containerDays.add (novoDia); } –

+0

Was ist passiert? Hast du einen Fehler erhalten? –

+0

nichts passiert und kein Fehler, der Container ($ .containerDays) hat kein $ .novodia darin .. –

Verwandte Themen