2012-12-04 2 views
0

나는 첫 번째 backbone.js 앱을 만들고 벽에 .다. 아마도 누군가가이 장애물을 지나쳐 나를 도울 수 있습니다 (제 이해의 차이). 내가 원하는 /해야 할 일은 수집기 데이터를 라우터로 반환하여 검도 UI 그리드에 바인딩 할 수 있지만 컬렉션의 검색 결과를 보지 못하는 것입니다. 근본적인 것이 빠져 있지만, 나는 그것이 무엇인지 모른다.독특한 backbone.js 컬렉션에 머리를 감싼다.

ES.Router = Backbone.Router.extend({routes: { 
      '': 'search', 
      'search': 'search', 
      'results': 'results' 
     }, 
     results: function() { 
      var resultsData = new ES.Results(); 
      var boo = resultsData.fetch({ 
        data: JSON.stringify({"query":"myquery"}), 
        type: 'POST', 
        contentType: 'application/json' 
        }); 
      console.log(boo); 
     }}); 

    ES.Result = Backbone.Model.extend(); 

    ES.Results = Backbone.Collection.extend({ 
     model: ES.Result, 
     url: '/search/query' 
     }); 
+0

가 왜'success' 지정된 [여기] (HTTP와 같은'error' 콜백을 넣어하려고하지 않습니다 결과를 처리하기 위해 success 및/또는 on("reset") 이벤트를 사용 거라고 /backbonejs.org/#Collection-fetch) 디버그하여 실행하는 콜백을 확인하십시오. 그것에 대해 당신에게 아이디어를 줄 것입니다. 'error' 콜백으로 들어가면, 서버가 적절한 응답을 리턴하는지 확인하십시오.'JSON 배열 모델 '이어야합니다. – Cyclone

+0

그리고'boo'는'jqXHR'이 될 것이고,'resultData'는 로깅을 줄 것입니다. – Cyclone

답변

2

여기에 몇 가지 문제가 있습니다 :

  1. A는 GET가 아닌 POST해야 인출하는 저장 안 가져 오기 때문에 나 여기

    는 내가 지금까지 무엇을 가지고 아무거나 수정하십시오
  2. 어쩌면 개인적인 취향 일 수도 있지만, AJAX 요청 옵션을 수동으로 수정하는 것을 피하기 위해 url을 함수로 사용했습니다. 당신은 내가 이런 컬렉션을 써서 옵션 해시에 success 콜백을 추가하거나 컬렉션의 reset 이벤트

에 리스너를 추가하거나 필요하므로

  • fetch 전화는 항상 비동기 될 것입니다 :

    var resultsData = new ES.Results(); 
    resultsData.query = "soccer"; 
    

    : 당신이 컬렉션을 만들 때

    ES.Results = Backbone.Collection.extend({ 
        initialize: function() { 
         this.query = "test"; 
        }, 
        model: ES.Result, 
        url: function() { 
         return '/search/query?query=' + this.query; 
        } 
    }); 
    

    그런 다음 검색 설정/:

    resultsData.on("reset", function(collection) { 
        console.log(collection); 
    }); 
    
    console.log("Fetching...."); 
    resultsData.fetch({ 
        success: function(collection, response) { 
         console.log("Got data!" + collection.length); 
        }, 
        error: function(collection, response) { 
         console.log("Error: " + response.responseText); 
        } 
    }); 
    

  • +0

    도움을 주셔서 감사합니다. 이것은 내가 잃어버린 조각이었다. POST vs. GET에 대해서는 POST를 사용하지 않는 이유를 잘 모르겠다. 일부 POST 데이터 (쿼리 문자열)는 매우 길 수 있습니다. – Charles

    +1

    @Charles Get을하는 것은 필수적이지 않을 것 같습니다. 그것은 REST 모델에 대한 표준 일 뿐이며 백본은 기본적으로 Get = fetch, Post = save 및 Put = update를 사용합니다. – McGarnagle