9

ये BackBone.js पर काम करने के मेरे प्रारंभिक दिन हैं। मैं वास्तव में राउटर भाग से फंस गया हूं क्योंकि मुझे कंसोल में त्रुटि मिल रही है "त्रुटि: एक यूआरएल संपत्ति या फ़ंक्शन निर्दिष्ट होना चाहिए"। यह मेरा परिदृश्य है; मेरे पास एक क्लिक फ़ंक्शन है जो गतिशील रूप से एक आरईएसटी यूआरएल बनाता है, और डेटा को तदनुसार सर्वर से लाता है।त्रुटि: एक यूआरएल संपत्ति या फ़ंक्शन निर्दिष्ट किया जाना चाहिए

लिए यहाँ क्लिक करें समारोह कोड

function onUserClick(obj){ 
    var userID=$(obj).attr('id'); 
    window.location.href="#"+userID+"/"; 
    var userRouter = new UserRouter; 
} 

है और मैं रूटर में निम्न कोड

var userModel; 
var UserRouter = Backbone.Router.extend({ 
    routes:{ 
     ":userid/":"getUsers" 
    }, 
    getUsers:function(userid){ 
     var url="http://myserver.com/users/"+userid; 
     userModel = new UserModel({urlRoot:url}); 
     var userView = new UserView({el:$(#"container")}); 
    } 
}); 
var UserModel = Backbobe.Model.extend({}); 
var UserView = Backbone.View.extend({ 
    model:userModel, 
    initialize:function(){ 
     _.templateSettings = { 
      interpolate: /\{\{\=(.+?)\}\}/g, 
      evaluate: /\{\{(.+?)\}\}/g 
     }; 
     this.model.fetch(); 
     this.model.bind("change",this.render,this); 
    }, 
    render:function(){ 
     var data=this.model.toJSON(); 
     var userTemplate=_.template($("#userTemplate").text()); 
     var htmlData=userTemplate({ 
      "userData":data 
     }); 
     $(this.el).html(htmlData); 
    } 
}); 

किसी की मदद कर सकते हैं मुझे यहाँ मुद्दा यह पता लगाने की है? मुझे पता है कि मैंने यहां कुछ गलत किया है और इस पर एक विशेषज्ञ सलाह मांगा है। इस परिदृश्य के लिए एक मजाकिया नमूना बहुत सराहना की है।

+0

क्या आप अपनी त्रुटि में कुछ संदर्भ दे सकते हैं? आपने अभी तक इसे हल करने के लिए क्या करने की कोशिश की है? – tkone

उत्तर

21

आप अपने मॉडल पर fetch कॉल कर रहे हैं:

var UserView = Backbone.View.extend({ 
    model: userModel, 
    initialize: function() { 
     // ... 
     this.model.fetch(); 

लेकिन आप अपने मॉडल एक url संपत्ति नहीं दिया: सर्वर से

var UserModel = Backbone.Model.extend({}); 

fetch विधि बात करती है और यह url का उपयोग करता है ऐसा करने के लिए:

urlmodel.url()

Returns the relative URL where the model's resource would be located on the server. If your models are located somewhere else, override this method with the correct logic. Generates URLs of the form: "/[collection.url]/[id]" , falling back to "/[urlRoot]/id" if the model is not part of a collection.

default implementation for a Model's url इस तरह दिखता है:

url: function() { 
    var base = _.result(this, 'urlRoot') || _.result(this.collection, 'url') || urlError(); 
    if (this.isNew()) return base; 
    return base + (base.charAt(base.length - 1) === '/' ? '' : '/') + encodeURIComponent(this.id); 
}, 

आप एक urlRoot की जरूरत नहीं है, तो आपको URL पीढ़ी को सौंपने के लिए एक संग्रह नहीं है, और आप url तो urlError() ओवरराइड नहीं है कहा जाता हो जाता है और है कि जहां है आपका त्रुटि संदेश आता है।

आपकी UserModel को एक विश्वसनीय url संपत्ति या फ़ंक्शन की आवश्यकता है ताकि आप सर्वर से fetch उदाहरण प्राप्त कर सकें। वैकल्पिक रूप से, आप अपने मॉडल को डेटा से बना सकते हैं जो आपके क्लाइंट-साइड पर्यावरण में पहले से ही उपलब्ध है (जब तक आप निश्चित रूप से बैकबोन के माध्यम से कुछ भी सहेजने की योजना नहीं बना रहे हैं)।

+0

आपके उत्तर के लिए धन्यवाद, यह सहायक रहा है। –

संबंधित मुद्दे

 संबंधित मुद्दे