2013-05-03 76 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); 
    } 
    }); 

現在的對象在數據庫中正確更新。