2011-09-20 2 views
0

Backbone.js를 배우려고하고 있는데 모델에 가져 오는 데 문제가있는 것 같습니다. 나는 가지고있다 :Backbone.js 가져온 항목을 사용하는 방법

window.News = Backbone.Model.extend({ 
    urlRoot: "/rest/news" 
}); 

window.NewsItems = Backbone.Collection.extend({ 
    model: News, 
    url: "/rest/news" 
}); 

window.NewsView = Backbone.View.extend({ 
    el: $(".newsItem"), 

    events: { 
     "click .edit": "editNews" 
    }, 

    editTemplate: $('#tmpl-edit-news-item').template(), 

    editNews: function(evt) { 
     console.log("EDIT CLICKED"); 
     var ele = $(evt.target); 
     var news = new News({id:1}); 
     news.fetch(); 
     console.log(news); 
     console.log(news.get('title'); 
    } 

}); 

new NewsView(); 

페이지에 class = "edit"data-id = "$ ID"가있는 요소가 있습니다. 요소를 클릭하면 모든 것이 예상대로 진행됩니다. 백본은 editNews 함수를 실행하고 "EDIT CLICKED"는 콘솔에 표시되고 console.log (news)는 객체를 출력합니다. 그 객체 안에는 서버에 의해로드 된 뉴스 항목의 json이 들어있는 속성 필드가 있습니다. 그래서 서버가 작동하고 json을 다시 보냅니다. "Test News Title"로 설정된 제목 필드가 있지만 console.log (news.get ('title'))를 실행하면 정의되지 않은 값이 반환됩니다.

가져온 데이터를 백본 모델로 전환하기 위해 가져온 데이터를 전달해야합니까? 가져 오기를 사용하면 반환 된 json 데이터를 모델로 가져 갔다고 생각했습니다.

추가 정보 : 패치 이후 있도록

url requested: http://localhost/rest/news/1 
response data: {"class":"org.backbonetest.News","id":1,"content":"This is test content","dateCreated":"2011-09-20T16:19:56Z","lastUpdated":"2011-09-20T16:19:56Z","shortDescription":"","title":"Test News Title"} 

답변

3

그것은 다음과 같이해야합니다 :

editNews: function(evt) { 
    console.log("EDIT CLICKED"); 
    var ele = $(evt.target); 
    var news = new News({id:1}); 

    // fetch is asynchronous process so we will bind handler to model's change event 
    news.bind('change', function(model, value) { 
     console.log(news); 
     console.log(news.get('title'); 
    }, this) 
    news.fetch(); 
} 
1

좋아 내가 바로에 CONSOLE.LOG 호출 할 수 없습니다, 비동기입니다. success 함수를 추가하면 객체가 모델로 작동 할 수 있습니다.

var news = new News({id:1}); 
news.fetch(); 
console.log(news); 
console.log(news.get('title'); 

news.fetch({success: function() { 
         console.log(news.get("title")); 
        }, 
        processData: true 
      }); 

이 적절한 제목을 반환된다.

+0

는'processData'에서 가져 오기 옵션 무엇인가? –

+2

나는 이런 식으로 생각하지 않는다. @ant_Ti가 무엇을 제안하는지보십시오. "백본"방식은 모델/컬렉션의 "변경"또는 "재설정"이벤트에 바인딩하는 것입니다. 뷰에서는 종종 "렌더링"에 바인딩하고 렌더링 함수는 뷰의 해당 부분을 업데이트합니다. "성공"콜백은 일반적으로 다른 것들에 사용됩니다. –

관련 문제