2014-02-12 13 views
2

BackboneJS를 배우려고하는데 이것은 내가 겪고있는 오류입니다.TypeError 받기 : this.options는 정의되지 않았습니다.

저는 coffeescript로 코딩하고 있습니다. 이것은 생성 된 JS입니다. 올바르게 진행되고 있다고 생각하면서 이것이 왜 일어나고 있는지 전혀 알 수 없습니다.

(function() { 
    var AppRouter, MenuItemDetails, app; 

    MenuItemDetails = Backbone.View.extend({ 
    render: function() { 
     var markup; 
     markup = "<div>" + this.options.category + "</div>"; 
     this.$el.html(markup); 
     return this; 
    } 
    }); 

    AppRouter = Backbone.Router.extend({ 
    routes: { 
     "": "list", 
     "menu-items/new": "itemForm", 
     "menu-items/:item": "itemDetails" 
    }, 
    list: function() { 
     return $('#app').html('List Screen'); 
    }, 
    itemDetails: function(item) { 
     var view; 
     view = new MenuItemDetails({ 
     name: item, 
     category: 'Entree', 
     imagepath: 'no-image.jpg' 
     }); 
     return $('#app').html(view.render().el); 
    }, 
    itemForm: function() { 
     return $('#app').html("New item form"); 
    } 
    }); 

    app = new AppRouter(); 

    Backbone.history.start(); 

}).call(this); 

/* 
//@ sourceMappingURL=app.map 
*/ 

어디로 잘못 가고 있습니까?

+1

이 질문에 비슷한이인가/답변? http://stackoverflow.com/questions/19325323/backbone-1-1-0-views-reading-options 기본적으로 this.options는 더 이상 기본적으로 사용할 수 없습니다. –

+0

정말 고마워요! 날 올바른 방향으로 보냈어! – user3187254

답변

-1

this 키워드를 잘못 사용하고 있습니다.

MenuItemDetails = Backbone.View.extend({ 
render: function() { 
    var markup; 
    markup = "<div>" + this.options.category + "</div>"; // Error 
    this.$el.html(markup); 
    return this; 
} 
}); 

이것은 속성 옵션을 포함하지 않는 범위를 가리 킵니다. 통 더는 대신 다음과 같이 할이

var self = this; 
MenuItemDetails = Backbone.View.extend({ 
    render: function() { 
     var markup; 
     markup = "<div>" + self.options.category + "</div>"; // Error 
     this.$el.html(markup); 
     return this; 
    } 
}); 
+0

나는 이것을 시도 : 초기화 : 기능 (옵션) { 반환 this.options = 옵션 | {}; }, 그리고 효과가있었습니다. – user3187254

+0

포인트가 평이한 자바 스크립트에서는 true이지만, 백본의 확장 기능을 사용할 때는 그렇지 않습니다. 백본은 정의한 함수를 복사하여 객체의 프로토 타입에'extend'로 전달하므로'this'는 호출 될 때 객체의 인스턴스로 올바르게 설정됩니다. – tep

0

시도 같은 것을 수행해야합니다

MenuItemDetails = Backbone.View.extend({ 
    initialize: function(options) { 
     this.options = options; 
    }, 
    render: function() { 
     var markup; 
     markup = "<div>" + this.options.category + "</div>"; 
     this.$el.html(markup); 
     return this; 
    } 
    }); 
관련 문제