javascript - 获取 Parse.com 中尚未建立关系的对象列表 Angular javascript

标签 javascript angularjs parse-platform

我正在构建一个 AngularJS CRUD 站点,以将数据添加到 Parse.com,以供读取数据的移动应用程序使用。 (由于添加的数据量,CRUD 在真实键盘上更容易完成。)第一步是创建并保存子对象(成分和步骤),然后创建并保存一个与成分和步骤。我需要使用关系而不是指针来处理这些。 (因为我将来可能需要多对多)

这是我的问题:编写查询来查找已创建的尚未属于关系一部分的任何成分和步骤,以查找要添加到新配方中的成分和步骤。

Javascript SDK 中的示例未显示此场景,它们仅显示对存在的关系的查询,但相关项目上没有附加属性(帖子没有图像的帖子的评论) )。

Recipe has ingredients, a Relation<Ingredient>, and steps, a Relation<Step>.

这无法获取尚未与配方相关的成分。

    var Recipe = Parse.Object.extend("Recipe");
    var Ingr = Parse.Object.extend("Ingredient");

    recipeQuery= new Parse.Query(Recipe);
    recipeQuery.exists("ingredients");

    query = new Parse.Query(Ingr);
    query.doesNotMatchQuery("recipe",recipeQuery);
    query.ascending('name');
    query.find({
        success: function (data) {
            if (data.length > 0) {
                $scope.loadingMsg = '';
            }
            $scope.ingredients = data;
        }
    });

最佳答案

angular
.module('app.services')
.service('siteService', function($q, ParseService, $timeout) {
    var that = this;
    this.fetchIngr = function() {
        return this.fetchRecipes().then(function(recipes) {
            var q = recipes.reduce(function(initial, current) {
                initial.push(that.fetchIngredient(current));
                return initial;
            }, []);
            return $q.all(q);
        });
    };

    this.fetchRecipes = function() {
        var defer = $q.defer();
        var Recipe = Parse.Object.extend("Recipe");
        recipeQuery = new Parse.Query(Recipe);
        recipeQuery.ascending('name');
        recipeQuery.find({
            success: function(data) {
                console.log('data', data)
                defer.resolve(data);
            },
            error: function(error) {
                defer.reject(error);
            }
        });
        return defer.promise;

    };
    this.fetchIngredient = function(recipe) {
        var defer = $q.defer();
        recipe.relation('ingredients').query().find({
            success: function(res) {
                defer.resolve(res);
            },
            error: function(error) {
                defer.reject(error);
            }
        });
        return defer.promise;
    };

})

用法:

 siteService.fetchIngr().then(function(all){
            console.log('flatten all ingr for used recipes',[].concat.apply([], all));
        });

在 fetchIngr 函数中,您将收到配方中使用的所有成分的数组。然后你必须比较两个数组之间的差异来找到未使用的成分。要进行减法,您应该获取所有成分并在两个数组之间进行减法(一个用于食谱的成分,另一个包含所有成分)。请参阅此处的帖子:JavaScript array difference

如果您有任何疑问,请随时问我。

关于javascript - 获取 Parse.com 中尚未建立关系的对象列表 Angular javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585677/

相关文章:

javascript - AngularJS - ngrepeat 错误中的重复键

javascript - 无法在 AngularJS 中动态获取 radio 选择设置的值

javascript - 使用 Parse 更正 for 循环中的顺序

ios - 如何使用 PFObject 而不是 PFUsers() 注册用户

javascript - 检查div是否有Elements和没有某些Elements

javascript - Soundcloud 在 Javascript 中保持连接

angularjs - 如何使 Angular Material 表具有响应性

ios - 根据子查询解析查询

JavaScript onkeyup 正则表达式

javascript - $.Deferred().promise 与 $.get().promise