2013-04-19 10 views
1

아래에서 select를 채우려고합니다.백본 스틱 select aptax from ajax

View: Backbone.View.extend({ 
        initialize: function() { 
         this.setElement($('#templatePlaceholder')); 
        }, 
        bindings: { 

         'select#List': { 
          observe: 'ddList', 
          selectOptions: { 
           collection: Q.when(getSelects.execute()).then(function (data) { 
            console.dir(data); 
            return data; 
           }) 

          } 
         } 
        }, 

콘솔 배열 객체 반환

[ { value: 1, label: "a" }, { value: 2, label: "b" } ] 

을하지만 난 아무것도 얻을 수 없다.

collection: function() { return [{ value: 1, label: "a" },{ value: 2, label: "b" }];} 

이 모든 작품을 잘 :로

나는 모음을 정의합니다.

답변

1

잠재적으로 몇 가지 문제가 있습니다. 비동기 코드가 바람직하지 않을 수 있으므로 View이 할당되고 있으므로 즉시 실행됩니다. return data에 의해 반환되는 것이 아닌 그 약속을 실행 한 결과에 대한 콜렉션이 할당됩니다.

일부 솔루션 :

1) 당신은 페이지로드에 대한 당신의 선택 옵션을 부트 스트랩 수 있습니다. 이것은 단일 페이지 또는 백본 응용 프로그램에서 널리 사용되는 패턴입니다. 기본적으로, 백엔드에서 공통 데이터의 json 데이터 구조를 합친 다음 javascript 변수로 페이지에 렌더링합니다. 따라서 서버 측 템플릿 (jsp, erb, php)은 다음과 같습니다.

<!DOCTYPE html> 
... 
    <script type="text/javascript"> 
     window.bootstrap = { users: <%= userjson %>, ddlist: <%= ddlistjson %> }; 
    </script> 
... 

이 방법은 성능과 편의성을 위해 권장됩니다.

getSelects.execute()을 동 기적으로 실행할 수있는 옵션이있는 경우 (예 : jQuery 아약스 요청 인 경우 async:false 옵션으로 실행)보기의 몇 위치에서 실행할 수 있습니다. initialize 동안 뷰가 실제로 생성 될 때 데이터를 가져옵니다. 그것은 블록 다른 같은 펑키 상태에 UI를 떠날 수로

collection: function() { 
    var collection = []; 
    // Assumes that getSelects.execute() will block and run synchronously. 
    Q.when(getSelects.execute()).then(function (data) { 
     collection = data; 
    }); 
    return collection; 
} 

이 방법은 사용하지 않는 것이 좋습니다 : 또는 당신이 당신의 collection 다음 루틴 getSelects, 블록을 실행하고 기능을 결합 할당 할 수는 데이터를 반환 자바 스크립트가 실행되지 않아 잠재적으로 중단 될 수 있습니다.

+0

감사합니다. 나는 이것이 stickie 또는 백본 쟁점이 아니라 자바 스크립트 문제라는 것을 알고 있지만, 당신은 나에게 아무런 도움이되지 않았다. – LastTribunal

+0

np, 나에게 도움이되는지 알려주세요. 또한 github 레포에 붙어있는 질문을 자유롭게 게시 할 수 있습니다. – user2095627

+0

Matt. 다시 한 번 감사드립니다. 나는 너의 충고를 좀 더했다. 약속 안의 전체 백본 객체 그룹을 포장하여 async : true로 유지했습니다. 이렇게하면 백본을 확장하기 전에 모든 기본 객체를 미리로드 할 수 있습니다. 나는 거기에도 문제가 있다고 확신하지만, 지금은 효과가 있으며 차단되지 않습니다. – LastTribunal