2013-02-12 47 views
11

की विधि 'प्रतिस्थापन' को कॉल नहीं कर सकता है, मैं backbone.js का उपयोग करके एक साधारण आरएसएस ऐप विकसित करने की कोशिश कर रहा हूं। मैं इस backbone.js tutorial का उपयोग कर रहा हूँ। टेम्पलेट को परिभाषित करते समय, मुझे लाइन 2 (टेम्पलेट) पर निम्न त्रुटि मिल रही है। क्या कोई मुझे बता सकता है कि टैगनाम क्यों है: "li" ट्यूटोरियल में परिभाषित किया गया है?uncaught TypeError: अपरिभाषित backbone.js

uncaught TypeError: Cannot call method 'replace' of undefined backbone.js

Javscript

window.SourceListView = Backbone.View.extend({ 
    tagName:"li", 
    template: _.template($('#tmpl_sourcelist').html()), 

    initialize:function() { 
     this.model.bind("change", this.render, this); 
     this.model.bind("destroy", this.close, this); 
    }, 

    render:function (eventName) { 
     $(this.$el).html(this.template(this.model.toJSON())); 
     return this; 
    }, 

    close:function() { 
     $(this.el).unbind(); 
     $(this.el).remove(); 
    } 
}); 

एचटीएमएल

<script type="text/template" id="tmpl_sourcelist"> 
         <div id="source"> 
         <a href='#Source/<%=id%>'<%=name%></a> 
         </div> 
       </script> 

धन्यवाद

+0

डेटा के बिना टेम्पलेट को चलाने का प्रयास करें और देखें कि आपको क्या मिलता है ... यह $ el.html (this.template()) – beNerd

+0

यह लाइन 2 पर त्रुटियों (टेम्पलेट: _.template ($ ('# tmpl_sourcelist') .html()),)। सुनिश्चित नहीं है कि आप क्या सिफारिश कर रहे हैं। – jsp

उत्तर

44

आप यहीं से अपने त्रुटि हो रही है:

के internals के
template: _.template($('#tmpl_sourcelist').html()), 

भाग संकलित टेम्पलेट समारोह के उत्पादन के रास्ते पर uncompiled टेम्पलेट पाठ पर String#replace बुला शामिल है। यही कारण है कि विशेष रूप से त्रुटि आमतौर पर मतलब है कि आप प्रभावी रूप से इस कह रहे हैं:

_.template(undefined) 

अगर वहाँ डोम में कोई #tmpl_sourcelist जब आप कहते हैं $('#tmpl_sourcelist').html() कि हो सकता है।

कुछ सरल समाधान कर रहे हैं:

  1. ताकि आपके #tmpl_sourcelist आता है इससे पहले कि आप अपने दृश्य को लोड करने का प्रयास अपने <script> आदेश को समायोजित करें।

    window.SourceListView = Backbone.View.extend({ 
        tagName:"li", 
        initialize:function() { 
         this.template = _.template($('#tmpl_sourcelist').html()); 
         //... 
    

जहाँ तक tagName चला जाता है के रूप में, fine manual यह कहना है:

elview.el

[...] this.el is created from the view's tagName , className , id and attributes properties, if specified. If not, el is an empty div .

  • बजाय दृश्य की "वर्ग" परिभाषा के अपने दृष्टिकोण के initialize में संकलित टेम्पलेट समारोह बनाएं

    तो यह आपके विचार में है:

    tagName: 'li' 
    

    का अर्थ है कि बैकबोन स्वचालित रूप से एक नया <li> तत्व आपके दृश्य के el के रूप में बना देगा।

  • +0

    महान जवाब! इससे मुझे मेरी स्थिति में मदद मिली क्योंकि \t $ ("# target")। Html (_। टेम्पलेट (टेम्पलेट, [पोस्ट])); एक आईडी = लक्ष्य की तलाश में था लेकिन यह एक वर्ग था। – Anthony

    +0

    @ एंथनी: धन्यवाद। तो फिर छिपाने में एक ही '_.template (अपरिभाषित) 'समस्या। –