如何使用Parse.Query检索特定对象

时间:2015-03-03 22:20:52

标签: javascript parse-platform

我正在使用Parse创建WebApp,我正在尝试使用以下代码获取对象Product的实例:

getProduct: function() {
   var productClass = Parse.Object.extend("Product");
   var query = new Parse.Query(productClass);
   var result = query.get(productId, {
       success: function(object) {
          console.log(object.get("productName"));
       },
       error: function(object, error) {
           ...
       }
   });
   return result;
}

我得到了:

result.get is not a function

仅打印对象,我意识到我没有得到Product,我在控制台(Safari)中得到了这个:

[Log] Object (views.js, line 269)
_rejected: false
_rejectedCallbacks: Array[0]
_resolved: true
_resolvedCallbacks: Array[0]
_result: Arguments[1]
__proto__: Object

我尝试了很多方法,但我无法检索Product对象及其属性。我做错了什么?

修改

我正在添加Products View

window.app.Products = Parse.View.extend({

    template: _.template($('#products-template').html()),

    el: $('body'),
    content: $('#content'),

    ...

    initialize: function() {
        _.bindAll(this, 'render');
        this.render();
    },

    render: function () {
        $(this.content).html(this.template);
        return this;
    },

    ...

    getUser: function() {
        return Parse.User.current();
    },

    getUserProduct: function() {
        var promise = new Parse.Promise();

        var productClass = Parse.Object.extend("Product");
        var query = new Parse.Query(productClass);
        query.equalTo("objectId", this.getUser().get("product").id);
        query.first().then(function(result) {
            if(result){
                // If result was defined, the object with this objectID was found
                promise.resolve(result);
            } else {
                console.log("Product was not found");
                promise.resolve(null);
            }
        }, function(error){
            console.error("Error searching for Product. Error: " + error);
            promise.error(error);
        });

        return promise;
    },

    setProduct: function() {
        this.getUserProduct().then(function(result) {
            if(result){
                console.log(result.get("productName"));
                var productName = result.get("productName");

            } else {
                console.log("Could not set Product"); 
            }
        }, function(error){
            console.log("Error: " + error);
        });
    }
});

我试图获得一个参数列表并更新它们:

info: {
         user: '...',
         product: '...'
      }

然后将其传递给template

$(this.content).html(this.template(this.info));

但我无法更新product

1 个答案:

答案 0 :(得分:4)

在我写这篇文章时,我意识到你真的没有通过将产品搜索拉入自己的方法来保存所有代码。我希望它至少会告诉你如何创建和调用自己的自定义异步方法。例如,您可能有一个比当前查询复杂得多的查询,或者它可能在找到所需的响应之前执行多个查询,在这种情况下,将它拉入自己的方法是有意义的。

获取产品异步方法

此方法检索具有给定objectID

的产品
var getProduct =  function(productId) {
    var promise = new Parse.Promise();

    var Product = Parse.Object.extend("Product");
    var query = new Parse.Query(Product);
    query.equalTo("objectId",productId);
    query.first().then(function(result){
        if(result){
            // If result was defined, the object with this objectID was found
            promise.resolve(result);
        } else {
            console.log("Product ID: " + productId + " was not found");
            promise.resolve(null);
        }
    }, function(error){
            console.error("Error searching for Product with id: " + productId + " Error: " + error);
            promise.error(error);
    });

    return promise;
}

通话方式

调用上述方法的简单方法的示例。

var myMethod = function(){
    var productID = "12345678";

    getProduct(productID).then(function(result){
        if(result){
            console.log(result.get("productName"));
            var productName = result.get("productName");
            var productPrice = result.get("productPrice"); 
            // Now that you have some relevant information about your product
            // you could render it out to an Express template, or use this
            // value in a calculation etc. 
        } else {
            console.log("Product with objectId: " + productID + " was not found"); 
        }
    }, function(error){
        console.log("Error: " + error);
    });

}

备注

  • 由于这些方法是异步的,因此没有真正的数据 以'返回值'返回(该方法返回一个promise)。 相反,我们会根据承诺返回相关数据(其中 你看promise.resolve(XXX)
  • 拥有一个没有任何意义 这个Node.js样式架构中的可变全局变量。