2012-04-03 9 views
5

मेरे पास रीढ़ की हड्डी का दृश्य है जो डीओएम में किसी तत्व को क्रियान्वित करता है। समस्या यह है कि घटनाओं को बुलाए जाने पर डीओएम तत्व प्रस्तुत नहीं किया गया है। मेरे कोड इस तरह दिखता है:रीढ़ की हड्डी में कार्य शुरू करने के बाद डीओएम को ईवेंट कैसे बाध्य करें?

// Change the focus to a full goal view 
    var GoalFullView = Backbone.View.extend({ 

    // Bind the goal full view 
    el: $("#main"), 

    // Events for making changes to the goal 
    events: { 
     "keypress #goal-update": "createOnEnter", 
    }, 

    // Cache the template for the goal full view 
    template: _.template($("#goal-full-template").html()), 

    // Render the goal full and all of its goal updates 
    initialize: function() { 
     this.render(); 
     this.collection = new GoalUpdateList; 
     this.collection.bind('add', this.addOne, this); 
     this.collection.bind('reset', this.addAll, this); 

     this.collection.fetch(); 
    }, 

आप देख सकते हैं, इस घटना के लिए बाध्य तो यह डोम तत्व का पता नहीं लगा सकते हैं क्योंकि यह गाया नहीं किया गया है आरंभीकरण पहले होता है। आरंभ करने के बाद तक मैं ईवेंट बाध्यकारी में देरी कैसे कर सकता हूं?

संपादित करें 1: हम्म, मैं एक कंसोल लॉग करते हैं, और यह एक कुंजी दबाने पर कुछ बाहर प्रिंट, लेकिन मैं अपने Chrome के डेवलपर कंसोल में इस संदेश प्राप्त हो रहा:

Uncaught TypeError: Cannot call method 'apply' of undefined 

इसका क्या मतलब है?

+0

सिर्फ इनिशियलाइज़ समारोह में होने वाली घटनाओं के लिए बाध्य। या प्रतिनिधिमंडल का उपयोग करें। यानी, ईवेंट को मूल तत्व में बाध्य करें और इवेंट कॉलबैक में परीक्षण करें जिसमें तत्व ने ईवेंट को ट्रिगर किया था। – mpm

+0

मुझे लगता है कि मैं हर समय इस दृष्टिकोण का उपयोग करता हूं और मुझे कोई समस्या नहीं है .. मुझे जांचने दो। – fguillen

+0

मुझे 'कीप्रेस' नाम की घटना याद नहीं है, लेकिन मुझे 'कीप' याद है। क्या यह समस्या हो सकती है? (बीटीडब्ल्यू, अपना उपयोगकर्ता नाम प्यार करें :) –

उत्तर

3

जैसा कि मुझे उम्मीद है कि समस्या किसी अन्य जगह पर है।

डीओएम events डीओएम तत्व वास्तविक मौजूद होने से पहले बाध्यकारी घोषणा की जा सकती है।

मुझे लगता है कि यह कोड उदाहरण उस स्थिति को पुन: उत्पन्न करता है जो आप बात कर रहे हैं और अभी भी DOM event सही ढंग से बाध्य है।

var View = Backbone.View.extend({ 
    events: { 
    "click #link": "click" 
    }, 

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

    render: function(){ 
    this.$el.html("<a href='#' id='link' onclick='return false'>link</a>"); 
    } 
}); 

new View({ el: "body" }).render();​ 

चेक jsfiddle example code

+0

यह काम करता है, लेकिन पोस्ट में वर्णित बिल्कुल वही समस्या थी, जिसे मैं काम करने की उम्मीद करता हूं। इससे कोई फर्क नहीं पड़ता कि मैं प्रारंभिक विधि में 'this.el' घोषित करता हूं। –

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