2015-09-24 2 views
0

Im достаточно новыми для позвоночника и работают в странную проблемумагистрального расслоения плотного модельной функции синтаксического анализа с множеством функций

У меня есть модель, которая выглядит так:

define(function (require, exports, module) 
{ 
    "use strict"; 

var Backbone = require('backbone'); 

return Backbone.Model.extend(
    { 

     defaults: { 
      isLoggedin: false 
     }, 

     url: 'http://api.com/login', 

     parse: function(data){ 
      //do stuff based on call 

     }, 
     initialize: function(){ 


     }, 
     doLogin: function(data){ 

      this.fetch({ 
       data: data, 
       type: 'POST' 
      }); 

      this.isUserLoggedIn(); 
     }, 

     isUserLoggedIn: function(){ 

      this.fetch({ 
       url:'http://api.com/loggedIn', 
       type: 'GET' 
      }); 
     } 

     doLogout: function() { 

      this.fetch({ 
       url:'http://api.com/logout', 
       type: 'POST' 

       }); 


     } 

    }); 
}); 

Как вы можете видеть, у меня есть 3 разных функции, происходящие из того, что мне нужно сделать, основаны на функции, которую я должен выполнять разными действиями или возвращать разные результаты, но имея одну функцию синтаксического анализа, как я могу узнать, какая функция вызывается, чтобы делать все, что мне нужно в синтаксическом анализе. Например, если вызвана функция isUserLoggedIn, мне нужно перенаправить их на какую-либо страницу на основе ответа, если вызывается doLogout, мне нужно перенаправить их на другую страницу на основе ответа. Есть идеи?

+0

Вы можете установить другое состояние атра помнить, что последняя называется функция, или вы можете позволить апите вернуть какое-то значение, чтобы сказать вы называете это функцией. – fuyushimoya

+0

Не могли бы вы рассказать мне, как это сделать, поскольку я упомянул им новое для магистрали и js – Yeak

ответ

0

Возможно, вы захотите использовать второй аргумент анализа, содержащий параметры.

MY_CONST = { 
    SOME_KIND_OF_URL: '/api/prod' 
} 

if (dev) { 
    MY_CONST.SOME_KIND_OF_URL = '/api/foo'; 
} 

MyModel = Bacbone.Model.extend({ 
    parse: function(response, options) { 
    if (options.url === MY_CONST.SOME_KIND_OF_URL) { 
    return 'foo'; 
    } 
    } 
}, MY_CONST) 
+0

Если я использую параметры, я получаю URL-адрес вызова, однако у меня будут проблемы, когда у меня есть dev и производственная версия вызова api , Я знаю, что могу повторно использовать его и получить последний параметр, но это кажется слишком грязным. – Yeak

+0

Вы можете использовать какие-то константы, которые переопределяют для prod/dev. И используйте их также в своем методе анализа. –

1

Вы должны хранить последнюю называемую функцию следующим образом:

return Backbone.Model.extend(
{ 

    defaults: { 
     isLoggedin: false 
    }, 

    url: 'http://api.com/login', 

    parse: function(data){ 
     if(this.lastCall == 'doLogin'){ 
      //do staff if doLogin was called 
      this.isUserLoggedIn(); 
     } 
     if(this.lastCall == 'isUserLoggedIn'){ 
      //do staff if isUserLoggedIn was called 
     } 
     if(this.lastCall == 'doLogout'){ 
      //do staff if doLogout was called 
     } 

    }, 
    initialize: function(){ 


    }, 
    doLogin: function(data){ 
     this.lastCall = 'doLogin'; 
     this.fetch({ 
      data: data, 
      type: 'POST' 
     }); 


    }, 

    isUserLoggedIn: function(){ 
     this.lastCall = 'isUserLoggedIn'; 
     this.fetch({ 
      url:'http://api.com/loggedIn', 
      type: 'GET' 
     }); 
    } 

    doLogout: function() { 
     this.lastCall = 'doLogout'; 
     this.fetch({ 
      url:'http://api.com/logout', 
      type: 'POST' 

      }); 


    } 

}); 
+0

Thats perfect thank you – Yeak

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

  • Нет связанных вопросов^_^