WedX - журнал о программировании и компьютерных науках

Функция разбора модели backbone js с несколькими функциями

Я довольно новичок в магистрали и столкнулся со странной проблемой.

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

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

var Backbone = require( 'backbone' );

return Backbone.Model.extend(
    {

        defaults: {
            isLoggedin: false
        },

        url: 'https://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:'https://api.com/loggedIn',
                type: 'GET'
            });
        }

       doLogout: function () {

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

                });


         }

    });
} );

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


  • Вы можете установить другое состояние атрибута, чтобы помнить, какая функция была вызвана последней, или вы можете позволить API возвращать некоторое значение, чтобы сообщить вам, какая функция ее вызывает. 24.09.2015
  • Не могли бы вы рассказать мне, как это сделать, поскольку я упомянул, что я новичок в магистрали и js 24.09.2015

Ответы:


1

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

return Backbone.Model.extend(
{

    defaults: {
        isLoggedin: false
    },

    url: 'https://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:'https://api.com/loggedIn',
            type: 'GET'
        });
    }

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

            });


     }

});
24.09.2015

2

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

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)
24.09.2015
  • Если я использую параметры, я получаю URL-адрес того, какой вызов был сделан, однако у меня будут проблемы, когда у меня будет версия вызова API для разработки и производства. Я знаю, что могу использовать регулярное выражение и получить последний параметр, но это кажется слишком грязным 24.09.2015
  • Вы можете использовать какие-то константы, которые переопределяют prod/dev. И используйте их также в своем методе разбора. 25.09.2015
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]