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

Помогите мне, пожалуйста! Извините, мой английский не очень хорошо, но я постараюсь объяснить свою проблему. Я не могу выбрать элемент ввода внутри формы текущего объекта, потому что this.form undefined. Почему это не определено?как относиться к «этому» в стоимости объекта?

Что не так в этом коде?

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

И как я могу исправить вышеуказанный код?

+0

Объект не существует в момент его определения и, следовательно, не может быть передан. Геттер может быть решением или просто переписать '$ ('search-form')'. – Teemu

+1

'this' будет ссылаться на контекст, содержащий объект' search'. Не сам объект. У вас есть заводский метод для создания этих объектов? Тогда вы можете установить 'input'? – ste2425

+2

Покажите, как вы используете свойство 'input' – Maxx

ответ

0

$('search-form').find('.search-input') - единственный способ заставить его работать. Когда вы определяете свои значения, объект еще не существует, поэтому вы не можете ссылаться на него. Вы можете попытаться определить объект, а затем добавить search.input = search.form.find('.search-input')

1

Вы можете изменить input свойство быть функцией вместо:

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

Затем вызовите с помощью search.input(), чтобы получить результат.