2012-06-09 3 views
0

내보기를 설정하고 초기화하기 위해 .extend()을 실험하고 있습니다. 계층 구조 안에 깊게 중첩 된 객체를보기 위해 설정 변수를 할당하는 것이 편리하다는 것을 알았습니다.Backbone.js extend and this

내 문제는 내보기가 자신의 이이 컨텍스트를 잃을 것입니다. 이것은 내가 만든 생성자가 asume 인 ctor 개체가됩니다. 이 문제를 어떻게 해결할 수 있습니까?

내 coffeescript는 다음과 같습니다. 첫 번째 클래스가 깊은 나무 내에서 중첩 될 것, 두 번째는 최상위 수준입니다 응용 프로그램 부팅 :

# This is a child somewhere deep within a tree of views. 
class View extends Backbone.View 
    initialize: -> 
    console.log @ # returns object ctor 

MyView = View.extend({ 
    initialize: -> 
    # do config stuff then init prototype 
    App.Views.MyView.prototype.initialize() 
}) 

view = new MyView 

답변

4
을 이해하지 않습니다

두 가지 :

먼저, 그리고 중요하게, 당신은

class MyView extends View 

대신 View.extend 사용할 수 있습니다. CoffeeScript 클래스와 Backbone 클래스는 상호 운용이 가능합니다.

두 번째 그리고 이것은 중요한 부분-대신

App.Views.MyView.prototype.initialize() 

의 당신은 단순히 효과적으로 같은 일을하지만,

super 

함수임을 보장 커피 스크립트 키워드를 사용해야입니다 올바른 컨텍스트에서 호출됩니다. 보너스 : 또한 모든 함수 인수를 전달합니다. 당신이 궁금하다면

super 여기 (__super__ 모두 커피 스크립트의 extends에 의해 설정되어 슈퍼 클래스에 대한 참조)

initialize.__super__.constructor.apply(this, arguments) 

로 컴파일합니다. applyat MDN에 대해 읽어보십시오.

+0

나는 extend()와 extend에 대해 궁금 해서요. 어쩌면 내가 뭔가 잘못하고있는 것 같아. 고마워! – Rimian

0

내 커피 스크립트 밤은 너무 뜨거워하지만 당신은 당신이 원하는보기를 보내는 함수를 호출 할 수 있습니다 첫 번째 매개 변수

과 이에 대한 값은 내가 standardish JS

var view = null; 
MyView = View.extend({ 
    initialize: function() { 
    // do config stuff then init prototype 
    App.Views.MyView.prototype.initialize.call(view) 
    } 
}) 
view = new MyView; 

임에 당신이 그 시점 또는 중 생성 된 JS에 대한 액세스 권한이 확실하지 가정합니다. 당신은 당신이 그것을 통과 할 수 있어야 함수를 호출 할 때이 값이 될해야하는지에 액세스 할 수있는 경우 는 점은 인.

나 자신을 확인할 것입니다하지만 난 커피 스크립트 :