2016-08-04 41 views
-1

Ich habe in C++ programmiert, aber ich versuche, einen Facebook-Bot in Javascript zu programmieren.Javascript facebook bot Funktion

Ich habe eine Funktion Options, die Optionsfelder erstellt. Die Tasten sind so programmiert, wie folgt aus (1):

"buttons": [{ 
"type": "web_url", 
"url": "https://www.messenger.com", 
"title": "Use" 
}] 

Da ich aber viele von ihnen haben würde Ich mag eine Funktion erstellen Schaltflächen zu erstellen. Ich habe versucht, eine Button-Funktion wie das zu schaffen: (1) oben durch diese

function PLButton(type, title, payload) { 
    "type": type, 
    "title": title, 
    "payload": payload 
} 

Und dann ersetzen Sie den Code:

"buttons": [{PLButton("postback", "Drop", "PRESS_CANCEL")}] 

Aber es funktioniert nicht.

+0

Return ein Objektliteral aus der PLButton Funktion? – gcampbell

+0

Und übrigens in Objektliteralen müssen die Schlüssel nicht zitiert werden. '{foo: 42}' ist äquivalent zu '{" foo ": 42}' (aber wenn Sie stattdessen die * Variable * 'foo' brauchen, können Sie von ES6 aus' {[foo]: 42} ') machen. – gcampbell

Antwort

-1

Die Objekt-Literalsyntax und Funktionskörpersyntax sind nicht austauschbar, aber Sie können als nächstes ein Objektliteral innerhalb einer Funktion verwenden. Wenn Sie ein Objekt konstruieren und zurückkehren möchten, müssen Sie Ihre zwei Versuche kombinieren:

function PLButton(type, title, payload) { 
    return { 
    "type": type, 
    "title": title, 
    "payload": payload 
    }; 
} 

Die Objektliteral Syntax ({x: 1}) tut so etwas wie eine Karte zu schaffen (ein dict-Mode-Objekt), die die Funktion kann dann zurück. Diese Art von Helper ist ziemlich üblich, da ein Objekt später als eine Liste von losen Parametern einfacher zu erweitern ist.

-1
var initialButtonList = {"buttons": [{ 
"type": "web_url", 
"url": "https://www.messenger.com", 
"title": "Use" 
}]} 

function PLButton(type, title, payload) { 
var newButton={//create newButton as object that holds key-value pairs 
"type": type, 
"title": title, 
"payload": payload 
}; 
return newButton; 
} 
initialButtonList.buttons.push(PLButton("postback", "Drop", "PRESS_CANCEL")); 
//initialButtonList will now have the newly added button as well; 
+9

Willkommen bei SO. Können Sie erklären, warum/wie Ihr Code das Problem löst, anstatt nur Code zu veröffentlichen? – DVK

+1

Können Sie es besser erklären? Ich habe einige Probleme, die Funktion in meinem Optionen Funktion aufrufen: Funktion Optionen (Absender, name1, name2) { lassen message = { "attachment": { "type": "Vorlage", "Nutzlast" : { "template_type": "generische", "elements": [{ "title": name1, initialButtonList.buttons.push (PLButton ("postback", "Drop", "PRESS_CANCEL"))); Wie soll ich es tun? :/ Vielen Dank für Ihre Aufmerksamkeit – Laura

+0

@ DVK, @ Laura Der Code funktioniert wie folgt: initialButtonList ist ein Objekt mit der Eigenschaft namens Schaltflächen. Buttons ist das Array von Objekten, wobei jedes Objekt eine Liste der Eigenschaften enthält: type, url, title. Immer wenn eine neue Schaltfläche (die auch ein Objekt ist) hinzugefügt wird, sollte sie zu den Schaltflächen hinzugefügt werden, was durch die folgende Zeile "initialButtonList.buttons" erreicht wird.push (PLButton ("postback", "Drop", "PRESS_CANCEL")); " – Meghana

-1

Gelöst!

Ich habe gerade eine Funktion wie folgt aus:

function PLButton(tipo, titulo, accao){ 

var Butt = {type:tipo, title: titulo, payload: accao}; 

return Butt; 

}

Und incede die funcion Optionen:

"buttons": [PLButton("postback", "Use", "PRESS_USE_SCISOR"), PLButton("postback", "Drop", "PRESS_DROP_SCISOR")],