将Parse.Query检索的对象分配给变量

时间:2015-01-13 21:52:40

标签: javascript backbone.js parse-platform

我试图做一些似乎应该非常简单但却一直在寻找几个小时而没有运气的事情。我只是想查询给定objectId的Parse.Object的子类(理想情况下使用.get()但.find或.first也可以工作)并将整个对象分配给我可以在查询外部访问的变量。我知道查询返回promises并且我能够从我的.then()函数中记录我想要捕获的对象,但是我无法弄清楚如何在其他地方访问它。这就是我现在所拥有的,我认为我走在了正确的轨道上。

      var thisLunchQuery = new Parse.Query(Lunch);
      var lunchIdTemp = this.model.get("lunchId");

      thisLunchQuery.equalTo("objectId", lunchIdTemp);
      var thisLunch = thisLunchQuery.find().then(function(results) {
        console.log(results[0]);
      });

这会记录我想要访问的整个对象,我可以在控制台中看到它的属性。但是,我希望能够访问" thisLunch"我的代码中的其他地方变量就目前而言,我无法做到这一点。由于变量的范围,我假设是这样的。如何以一种更大范围的方式定义该变量

这里有一个更全面的代码和平,显示了我正在尝试做的事情

render: function() {

  var thisLunchQuery = new Parse.Query(Lunch);
  var lunchIdTemp = this.model.get("lunchId");

  function assignLunch(results){
    //not sure what goes here
  }

  thisLunchQuery.equalTo("objectId", lunchIdTemp);
  thisLunch = thisLunchQuery.find().then(assignLunch);


  var templateArgs ={
    thisPlans: this.model.toJSON(),
    thisLunch: thisLunch
  };


  $(this.el).html(this.template(templateArgs));
  return this;
  this.delegateEvents();
}

正如您所看到的,我尝试抓取对象,以便将其传递给模板并在其中访问其属性。我希望这会有所帮助,我对这一切都很陌生。

更新:

这是尝试链接查询的最佳尝试,以便我可以将第一个结果的一部分用作第二个结果的参数,然后在最终回调函数中使用查询对象。< / p>

render: function() {

  var thisLunchQuery = new Parse.Query(Lunch);
  var thisLocationQuery = new Parse.Query(Location);
  var lunchIdTemp = this.model.get("lunchId");

  function assignLunch(results){
    lunchObject = results[0];
    thisLocationQuery.equalTo("objectId",    results[0].get("locationId");
thisLocationQuery.find.then(assignLocation);
  }

function assignLocation(locationResults, lunchObject){
// I'd like to be able to access the location I just found (locationResults[0]) as 
//well as the original lunchId from the first query inside this callback

var templateArgs ={
    thisPlans: this.model.toJSON(),
    thisLunch: lunchObject,
    thisLocation: locationResults[0];
  };

  $(this.el).html(this.template(templateArgs));
}

  thisLunchQuery.equalTo("objectId", lunchIdTemp);
  thisLunch = thisLunchQuery.find().then(assignLunch);

  return this;
  this.delegateEvents();
}

显然,这并不安静,但我不确定如何传递数据,就像我想要的那样。也许我应该使用.when?

2 个答案:

答案 0 :(得分:0)

您可以使用thisLunch调用函数作为参数,如:

  var thisLunchQuery = new Parse.Query(Lunch);
  var lunchIdTemp = this.model.get("lunchId");

  thisLunchQuery.equalTo("objectId", lunchIdTemp);
  var thisLunch = thisLunchQuery.find().then(function(results) {
     funcName(results[0])
  });

或将其放在全局/窗口对象中,如:

  var thisLunchQuery = new Parse.Query(Lunch);
  var lunchIdTemp = this.model.get("lunchId");

  thisLunchQuery.equalTo("objectId", lunchIdTemp);
  var thisLunch = thisLunchQuery.find().then(function(results) {
     window.myLunch = results[0];
  });

答案 1 :(得分:0)

您需要做的是定义一个函数,该函数执行您想要对结果执行的操作,并将其传递给promise success方法。可能看起来像这样:

function doSomething(result) {
// do your stuff here
}

thisLunchQuery.find().then(doSomething)

更新

在您查看的上下文中,代码可能类似于:

render: function() {

  var thisLunchQuery = new Parse.Query(Lunch);
  var lunchIdTemp = this.model.get("lunchId");

  var self = this;
  function assignLunch(results){
    var templateArgs = {
      thisPlans: this.model.toJSON(),
      thisLunch: results
    };
    self.$el.html(self.template(templateArgs));
  }

  thisLunchQuery.equalTo("objectId", lunchIdTemp);
  thisLunchQuery.find().then(assignLunch);

  return this;
}