2013-05-11 2 views
1

backbone.js를 require.js와 함께 사용하고 하나의 상위보기와 두 개의 하위보기를 보유합니다.많은보기에서 backbone.js의 공통 기본값 사용

ParentModel에 공통 기본값을 갖고 싶습니다. ParentView에서 기본값을 제어하고 ParentView 로직을 자식 뷰에서 호출하는 공통 논리를 갖고 싶습니다. 코드가 여기에 있습니다.

parentView.js

define(
    ['jquery', 'underscore', 'backbone', 'models/parentModel'], 
    function($, _, Backbone, ParentModel) { 

    var ParentView = Backbone.View.extend({ 
     model: new ParentModel(), 
     initialize: function() { 
     this.model.on("change:hoge", this.switchHoge); 
     }, 
     parentSet: function(k, v) { 
     // context is childen model 
     // want to set parent model 
     this.model.set(k, v); 
     }, 
     switchHoge: function(k, v) { 
     if (this.model.get("view") == "A") { 
      console.log("aaaaaaaaaaaa"); 
     } else if (this.model.get("view") == "B") { 
      console.log("bbbbbbbbbbbb"); 
     } 
     } 
    }); 

    return ParentView; 
    } 
); 

childView_A

var ChildView_A = ParentView.extend({ 
    model: new ChildModel_A(), 
    change: function() { 
     this.parentSet("hoge", "A"); 
    } 
    } 

childView_B.js

var ChildView_B = ParentView.extend({ 
    model: new ChildModel_B(), 
    change: function() { 
    this.parentSet("hoge", "B"); 
    } 
}); 

그것은 parentSet 컨텍스트 어린이 모델로 대체 문제입니다. ParentView에서 바인드 된 함수가 호출되지 않습니다.

ParentView : model의 이름을 ParentView : another_model로 변경하면이 문제를 해결할 수 있습니다.

하지만 아름답 지 않은 것처럼 보입니다.

Backbone.js에서이 과실이 있습니까? 나는 무엇을 할까?

var Parent = new ParentView({model: model}); 

var Child_A = new ChildView_A({parent: Parent}); 

다음 chieldview에 당신이 할 수 있습니다 :

답변

0

이 잘 나는 당신이이 같은 새로운 아이 뷰 생성 할 때 부모의 뷰를 참조 할 수 있다고 생각

this.options.parent.parentSet("hoge", "A"); 

을 그리고 그 호출해야 부모 뷰의 문맥을 가지는 메소드

또한 쉽게 부모 뷰에 액세스 할 수 있도록이 줄을 볼 자녀의 초기화 방법에 추가 할 수 있습니다 : 여기

this.parentView = this.options.parent; 

는 작업 바이올린의 :

http://jsfiddle.net/5JRZe/2/

0

당신 컨텍스트를주지 않고 변경 이벤트를 듣고 있습니다. 따라서 change 안에있는 this은 뷰 인스턴스가 아닙니다. 다음과 같이 이벤트 구독 코드를 변경 수정하려면 :

this.model.on("change:hoge", this.switchHoge, this); 

사실, 이벤트 리스너에 컨텍스트로 this를 전달하는 데 항상 좋은 생각 - 특별히 다른 뭔가를 원하고 나의 실제로는 거의 발생하지 않는 한.