2013-01-15 2 views
1

핸들 막대 및 백본으로 모델 속성을 표시하는 데 이상한 어려움이 있습니다.여기에 코드가 있습니다.핸들 막대가 backbone.js 모델 속성을 읽지 않습니다

MYAPP.Menu.Items = Backbone.Collection.extend({ 
    model: MYAPP.Menu.Item, 
    url: 'menuItems' 
}); 

MYAPP.Menu.ItemView = Backbone.View.extend({ 

    initialize : function() { 
     this.model = new MYAPP.Menu.Item(); 
     this.model.on('all', this.render, this); 
    }, 
    render : function() { 
     var source = $("#index-template").html(); 
     var template = Handlebars.compile(source); 
     console.debug(this.model.get("title")); <- shows default value 
     var html = template(this.model); 
     console.debug(html); 
     this.$el.html(html); 
     return this; 
    } 
}); 

그리고 템플릿

MYAPP.Menu = {}; 
MYAPP.Menu.Item = Backbone.Model.extend({ 
urlRoot : 'menuItem', 
     defaults: { 
     title: "Menu Item Title default", 
     price: "menu item price default" 
     }, 
}); 
:

<script type="text/x-mustache-template" id="index-template"> 
     <div class="entry"> 
     <h1>{{title}}</h1> 
      <div class="body"> 
      {{price}} 
      </div> 
     </div>   
    </script> 

출력은 데이터 밖으로 바로 태그에 불과하다. 콘솔에서도 오류가 발생하지 않습니다. 아이디어가 있으십니까?

것은 내가

initialize : function() { 
     this.title = "Menu Item Title default"; 
     this.price = "menu item price default"; 
    }, 

모든 작품을 잘 사용하고 있습니다 :

이 잘 나는 해결책을 가지고 있습니다. 사람이 기본적으로

var html = template(this.model.toJSON()); 

해야이

답변

4
var html = template(this.model); 

에 대한 설명이 있는가, this.modelthis.model.get()를 사용하여 검색하고 this.model.set()를 사용하여 설정할 수있는 모든 정보를 저장하는 attributes 속성이 있습니다. 이러한 특성은 기본 모델에 첨부되지 않습니다.

다음 코드

initialize : function() { 
    this.title = "Menu Item Title default"; // BAD! 
    this.price = "menu item price default"; // BAD! 
} 

당신은 기본 모델에 속성을 부착되어있을 때. 이것은 백본의 잘못된 사용입니다. 나중에 this.model.get("title")을 시도하면 undefined이됩니다.

+0

고마워요,하지만 여전히 왜 내가 기본 대신 생성자를 사용할 때 작동하는지 설명하지 않습니다. – Gleeb

+0

거기에 대한 답을 업데이트했습니다. – Lukas

관련 문제