2015-11-27 1 views
3

У меня есть компонент входа с моделью, которая идет на сервер и получает сообщение об ошибке, если логин был неправильным.Как получить ссылку на компонент внутри модели сохранить функции обратного вызова?

Вот идея о том, что я говорю о:

var LoginModel = can.Model.extend({ 
    create : "POST /account/login" 
},{}); 

can.Component.extend({ 
    tag: "pod-login", 
    template: can.view("/static/js/views/login_form.stache"), 
    viewModel:{ 
     login: new LoginModel(), 
     processLogin: function(login) { 
      // I need to access the component here 
     }, 
     processLoginError: function(response) { 
      // I need to access the component here 
     } 
    }, 
    events: { 
     "#login_button click": function() { 
      var form = this.element.find('form'); 
      var values = can.deparam(form.serialize()); 
      this.viewModel.login.attr(values).save(
       this.viewModel.processLogin, 
       this.viewModel.processLoginError 
      ); 
     } 
    } 


}); 

Проблема здесь заключается в том, что, когда я пытаюсь использовать «это» внутри модели обработчиков входа я получаю объект, INS' t текущий экземпляр компонента. В proessLoginError я получил, например, xhr-ссылку.

Как получить доступ к компоненту внутри processLogin и processLoginError?

Моим обходным путем здесь было использовать данные $ ('some_html_element_on_my_template') данных ('component', this) внутри события click_button click и получить доступ к ним внутри функций обратного вызова, но я думаю, что это можно было бы обработать лучше.

Любые прозрения?

ответ

1

Вы должны связать контекст обратных вызовов: this.viewModel.login.attr(values).save( this.viewModel.processLogin.bind(this), this.viewModel.processLoginError.bind(this) );

И не забудьте включить es5-shim для IE8.

+0

Выглядит хорошо @ николай-надоричев! Спасибо. –

Смежные вопросы