2016-08-04 5 views
0
var search = { 
    form: $('search-form'), 
    input: this.form.find('.search-input'), // 'this' undefined 
    callback: function(){ 
     console.log(this.form) // 'this' not undefined 
    } 
} 

Hilf mir bitte! Sorry, mein Englisch ist nicht sehr gut, aber ich werde versuchen, mein Problem zu erklären. Ich kann kein Eingabeelement innerhalb der Form des aktuellen Objekts auswählen, da this.form nicht definiert ist. Warum ist es undefiniert?Wie bezieht man sich auf 'this' im Objekteigenschaftswert?

Was ist in diesem Code falsch?

input: this.form.find('.search-input') 

Und wie könnte ich den obigen Code korrigieren?

+0

Das Objekt existiert nicht zum Zeitpunkt der Definition und kann daher nicht zugeordnet werden. Ein Getter könnte eine Lösung sein oder einfach '$ (' search-form ') '' schreiben. – Teemu

+1

Das 'this' würde sich auf den Kontext beziehen, der das' search' Objekt enthält. Nicht das Objekt selbst. Verfügen Sie über eine Factory-Methode zum Erstellen dieser Objekte? Sie könnten dann "Eingabe" einstellen? – ste2425

+2

Zeigen Sie, wie Sie 'Eingabe' -Eigenschaft verwenden – Maxx

Antwort

0

$('search-form').find('.search-input') - der einzige Weg, um es zum Laufen zu bringen. Wenn Sie Ihre Werte definieren, existiert das Objekt noch nicht, Sie können also nicht darauf verweisen. Sie können versuchen, Objekt zuerst zu definieren, und fügen Sie dann search.input = search.form.find('.search-input')

1

Sie konnten die input Eigenschaft ändern, anstatt eine Funktion zu sein:

var search = { 
    form: $('search-form'), 
    input: function() { 
     return this.form.find('.search-input') 
    }, 
    callback: function(){ 
     console.log(this.form) // 'this' not undefined 
    } 
} 

Dann rufen Sie search.input() mit dem Ergebnis zu erhalten.

Verwandte Themen