在对象创建时/之后设置Parse.Object.relation

时间:2012-07-13 00:29:40

标签: parse-platform

我的电子邮件对象(我自己的自定义类)正在编写,虽然关系没有按时设置,任何想法如何正确链接?

// Create new Email model and friend it
addFriendOnEnter: function(e) {
  var self = this;
  if (e.keyCode != 13) return;

  var email = this.emails.create({
    email:   this.emailInput.val(),
    ACL:     new Parse.ACL(Parse.User.current())
  });

  var user = Parse.User.current();
  var relation = user.relation("friend");
  relation.add(email);
  user.save();

  this.emailInput.val('');
}

谢谢! 刚

2 个答案:

答案 0 :(得分:2)

因为与Parse的服务器交谈是异步的,所以Parse.Collection.create使用Backbone风格的选项对象,并在创建对象时使用回调。我想你想做的是:

// Create new Email model and friend it
addFriendOnEnter: function(e) {
  var self = this;
  if (e.keyCode != 13) return;

  this.emails.create({
    email:   this.emailInput.val(),
    ACL:     new Parse.ACL(Parse.User.current())
  }, {
    success: function(email) {
      var user = Parse.User.current();
      var relation = user.relation("friend");
      relation.add(email);
      user.save();

      self.emailInput.val('');
    }
  });
}

答案 1 :(得分:0)

知道了!

this.emails集合上的.create方法实际上并不返回对象,因此var email为空。不知怎的,Parse猜测它是一个类Email的空对象,所以我猜结构是唯一一次保留的东西.create完成了它的工作。

相反,我使用.query,.equalTo和.first

检索服务器上的电子邮件对象
// Create new Email model and friend it
addFriendOnEnter: function(e) {
  var self = this;
  if (e.keyCode != 13) return;

  this.emails.create({
    email:   this.emailInput.val(),
    ACL:     new Parse.ACL(Parse.User.current())
  });

  var query = new Parse.Query(Email);
  query.equalTo("email", this.emailInput.val());
  query.first({
    success: function(result) {
      alert("Successfully retrieved an email.");
      var user = Parse.User.current();
      var relation = user.relation("friend");
      relation.add(result);
      user.save();
    },
    error: function(error) {
      alert("Error: " + error.code + " " + error.message);
    }
  });

  this.emailInput.val('');
}