Передать коллекцию вместо массива в функцию обратного вызова fetch().then()

Модуль, который получает данные с сервера и возвращает Обещание

MedicineManager.module("Entities", function (Entities, MedicineManager, Backbone, Marionette, $, _) {
    Entities.Suggestion = Backbone.Model.extend({
        default: {
            suggestion: ""
        }
    });

    Entities.SuggestionCollection = Backbone.Collection.extend({
        model: Entities.Suggestion,
        comparator: "suggestion"
    });

    var API = {
        getSuggestions: function (medicine) {
            var suggestions = new Entities.SuggestionCollection();
            suggestions.url="/medicine_suggestions/?id=" + medicine;
            return suggestions.fetch();
        }
    };

    MedicineManager.reqres.setHandler("suggestion:entities", function (medicine) {
        return API.getSuggestions(medicine);
    });

});


Модуль, который вызывает вышеупомянутый модуль для получения извлеченных данных

MedicineManager.module("MedicinesApp.Suggest", function (Suggest, MedicineManager,
    Backbone, Marionette, $, _) {


            MedicineManager.request("suggestion:entities", "paracetamol").then(function (medicines) {


            });
});


Как получить коллекцию вместо массива в качестве параметра для функции обратного вызова в then() поскольку medicines Параметр, передаваемый в обратный вызов, дает массив после извлечения значений.

2 ответа

Решение

Вместо прямого возврата обещания xhr отфильтруйте его через.then установить вашу коллекцию в качестве обещанного значения:

var API = {
    getSuggestions: function (medicine) {
        var suggestions = new Entities.SuggestionCollection();
        suggestions.url="/medicine_suggestions/?id=" + medicine;
        return suggestions.fetch().then(function() {
            return suggestions;
        });
    }
};

Первый аргумент (medicines) в MedicineManager.request(...).then(function (medicines) { }); будет вашей коллекцией

Передайте обратный вызов успеха вместе с опциями, которые будут вызываться с коллекцией в качестве первого аргумента магистрали:

Entities.SuggestionCollection = Backbone.Collection.extend({
  model: Entities.Suggestion,
  comparator: "suggestion"
});

var API = {
  getSuggestions: function(medicine, options) {
    var suggestions = new Entities.SuggestionCollection([],{
      url : "/medicine_suggestions/?id=" + medicine
    });
    return suggestions.fetch(options);
  }
};
 MedicineManager.reqrest.setHandler("suggestion:entities",API.getSuggestions);

Который вы можете использовать как:

MedicineManager.request("suggestion:entities", "paracetamol", {
  success: function(medicines) {}
});
Другие вопросы по тегам