2013-09-22 4 views
1

내가 백본 내 발이 젖지하기 위해 노력하고있어,하지만 내가 잘못 여기에 무엇을 알아낼 수 없습니다 : 내가 얻을백본보기에 모델이 정의되지 않았습니까?

var ToDoApp = { 
      model: Backbone.Model.extend({ 
       default:function(){ 
        return { 
         task: '', 
         completed:false 
        } 
       } 
      }), 
      collection: Backbone.Collection.extend({ 
       model: this.model 
      }), 
      view: Backbone.View.extend({ 
       model: new this.model(), 
       tagName: 'li' 
      }) 
     } 
console.log(new ToDoApp.model()); 

뷰의 모델 '정의되지 않은 함수 아니다'. 무슨 일이야?
보기에도 모델이 있어야 할 필요가 있습니까? 정말 기본적인 질문이라면 미안합니다. 백본이 어떻게 작동하는지 완전히 이해하지 못합니다.

답변

1

이 부분 :

collection: Backbone.Collection.extend({ 
    model: this.model 
}) 

는 당신이 ToDoApp을 구축하고 있지만 this 그 시간에 ToDoApp하지 않을 때 실행됩니다, this 아마 windowwindowmodel 속성이되지 않습니다 될 것입니다.

collection: Backbone.Collection.extend({ 
    model: undefined 
}) 

비슷한 문제가 여기 일이 : 그럼 당신을

var ToDoApp = { }; 
ToDoApp.model = Backbone.Model.extend({ ... }); 
ToDoApp.collection = Backbone.Collection.extend({ 
    model: ToDoApp.model 
}); 
ToDoApp.view = Backbone.View.extend({ 
    tagName: 'li' 
}); 

: 할

view: Backbone.View.extend({ 
    model: new this.model(), 
    tagName: 'li' 
}) 

가장 쉬운 것은 조각에 의해 ToDoApp 조각을 만들 것입니다 결과는 당신이 실제로 말하고있는 것입니다 뷰 인스턴스를 만들 때 인스턴스를 볼 수있는 모델을 만듭니다.

var model = new ToDoApp.model(); 
var view = new ToDoApp.view({ model: model }); 

또한 ToDoApp.Model, ToDoApp.CollectionToDoApp.View과 같은 이름을 사용하는 것이 "수업"에 더 일반적입니다.

+0

아, 그래, 그 모든 진술이 나쁜 생각일까요? 첫 번째 객체 선언을 끝내지 않고 응용 프로그램을 만들려고했습니다. –

+0

주로. 'ToDoApp.model'과'this'는 당신이 생각할 때'ToDoApp'가 아니기 때문에 문제가 생깁니다. 'model = Backbone.Model.extend (...)'항목을'ToDoApp' 선언문 외부로 옮길 수는 있지만 그것은 단지 문제를 숨기고있는 것입니다. –

+0

다음은 제가 생각해 낸 것입니다 : http : //pastebin.com/t92rsGG2 당신은 어떻게 생각합니까? 현실 세계에서 사용하는 것이 좋은 생각일까요? –

관련 문제