2013-05-03 108 views
0

我想使用parse.com连接模型和集合,但我很困惑。我打算通过骨干和JavaScript API parse.com集合来获取,但比较这个错误:POST https://api.parse.com/1/classes 404(Not Found)。骨干和parse.com模型和集合之间的连接

型号:

var Person = Backbone.Model.extend({ 


    defaults:{ 




     }, 


    initialize:function(){ 
      console.log("inperson"); 
      this.validate(); 
      this.send(); 
     }, 

    validate:function(){ 
      console.log("validate"); 
     }, 

     send:function(){ 
      var user = new Parse.User(); 
      user.set("username", this.get("username")); 
      user.set("password", this.get("password")); 
      user.set("email", this.get("email")); 



      user.signUp(null, { 
      success: function(user) { 
// Hooray! Let them use the app now. 
      }, 
      error: function(user, error) { 
// Show the error message somewhere and let the user try again. 
      alert("Error: " + error.code + " " + error.message); 
      } 
}); 


     } 






}); 




    return Person; 
    }); 

收藏:

var Usercollection = Parse.Collection.extend({ 

model:Person, 



    initialize:function(){ 




} 

    }); 






return Usercollection; 



}); 

最后调用的总汇和获取的观点:

var HomeView = Backbone.View.extend({ 

template: Handlebars.compile(template), 

events: { 


    }, 

    initialize: function() { 

     console.log("inhomeview"); 

     var amici = new Usercollection(); 
    amici.fetch({ 
    success: function(collection) { 
    amici.each(function(object) { 
    console.warn(object); 
}); 
}, 
error: function(amici, error) { 
// The collection could not be retrieved. 
} 
}); 



    }, 

    render: function() { 


    } 



}); 

return HomeView; 

}); 
+0

有人可以向我解释一个示例来创建一个模型,并通过parse.com进行收集和获取? – 2013-05-03 12:59:22

+0

您必须遵循REST API文档https://parse.com/docs/rest – 2013-05-03 14:29:01

+0

我可以通过javascript api而不使用其他API吗? – 2013-05-03 15:25:44

回答

0

广东话你只是交换骨干收集和模型解析的? (您只使用集合的分析类型,而不是模型!) 尝试将该骨干模型切换到Parse.Object。

一步下面的步骤:

所有的

首先让我们创建Parse.com一个新的应用,矿井被称为FunkyAppartments。 插入脚本标签加载解析JavaScript的lib放到index.html或whathever:

<script src="http://www.parsecdn.com/js/parse-1.5.0.min.js"></script> 

交换机骨干模型和收集使用解析类型,而不是(并重新命名的获取方法,如果您已经扩展骨干,因为我们做的不想在此改变解析的一个):

//var Appartment = Backbone.Model.extend(); Backbone wo. Parse.com 
    var Appartment = Parse.Object.extend("Appartment"); 

    //var Appartments = Backbone.Collection.extend({ Backbone wo. Parse.com 
    var Appartments = Parse.Collection.extend({ 
    model: Appartment, 
    loadAppartments: function(callback){ 
     debugger; 
     this.query = new Parse.Query(Appartment); 
     this.fetch(); 
    } 

    }); 

我在负载个公寓增加了调试标记,以便在控制器中间的那个开发工具休息,在这里我有机会获得公寓私有类型的控制器,因此我可以在解析服务器上存储一些数据,并通过在开发者中粘贴下面的内容来验证工具控制台。

var testAppartment = new Appartment(); 
testAppartment.save({name: "foobars"}).then(function(object) { 
    alert("yay! it worked"); 
}); 

Yei,数据显示在parse.com用户界面中,我们刚才添加的应用程序。更重要的是,它出现在我们的前端。那很简单!

UPDATE:问题w^BACKBONE 1.2.1,2.4.2木偶,下划线1.8.3

我注意到,其实我一直在使用的提线木偶,骨干和underscore.js的旧版本中已。初步更新似乎打破了应用程序。

经过一番研究,我发现它是没有返回成功呈现对象的解析部分。因此,我将集合类型改回为Backbone.collection而不是Parse.collection的扩展。

我也不得不重写查询方法,因为对象不会保存在正确的ID上,更新对象会导致添加新对象而不是更新旧对象。

var Apartment = Parse.Object.extend('Appartment'); 

var Apartments = Backbone.Collection.extend({ 
    model: Apartment, 
    query: new Parse.Query(Apartment), 
    initialize: function(){ 
    MyApp.vent.on('search:param', function(param){self.search(param); }); 
    var self = this; 
    this.query.find({ 
     success: function(results){ 
      self.reset(); 
      results.forEach(function(result){ 
       result.attributes.id__ = result.id 
       var ap = new Apartment(result.attributes); 
       self.add(ap); 
      }); 
      } 
     }); 
    } 
}); 

我添加的属性:id__持有解析ID(命名它,因为它骨干与它干扰只是ID没有工作,使其消失)。 最后,在保存模型来解析我利用id__为ID在保存拨打:

var ApartmentEditView = Backbone.Marionette.ItemView.extend({ 
    template: "#apartment-edit-template", 
    className: "apartmentDetail", 
    events: { 
     "click .store": "storeEdit", 
     "click .close": "closeEdit" 
    }, 
    storeEdit: function(){ 
     var priceNum = Number($('#price_field').val().replace(/\s/g, '')); 

     this.model.set({ 
     id: this.model.attributes.id__, 
     name:$('#name_field').val(), 
     price:priceNum, 
     description:$('#desc_field').val(), 
     url:$('#url_field').val() 
     }); 
     this.model.save(); 
     this.closeEdit(); 
    }, 
    closeEdit: function(){ 
     var detailView = new ApartmentDetailView({model: this.model}); 
     MyApp.Subletting.layout.details.show(detailView); 
    } 
    }); 

现在的对象在数据库中正确更新。