2014-12-12 3 views
1

[새로운 튜토리얼]
일정에 따라 작업 응용 프로그램 사례가 있습니다.
백본 호출 컨트롤러 메서드보기

1) 사용자 클릭 일정 변경 버튼. [보기에서]
2) 사용 가능한 일정을 가져옵니다. [컨트롤러]
3) 사용자 일정 중 하나를 선택합니다. [보기에서]
4) 게시 서버에 일정 목록을 업데이트했습니다. [컨트롤러]
5) 다시 렌더링보기

(1), (3)이 (가) 켜져 있고 (2), (4)가 컨트롤러에 있습니다.
뷰 -> 경로 -> 컨트롤러를 라우트해야합니다. 각 단계마다.
이것은 컨트롤러에 이벤트를 전달하는 올바른 방법입니다. 유효한 더 나은 방법 있는가 ??
Backbone.Events를 사용하는 경우입니다.

폴더 구조. [필요, 백본 사용]

├───app 
│ ├───managers 
│ ├───models 
│ ├───utils 
│ └───views 
├───lib 
└───tpl 

일정 모델.

Schedule = Backbone.Model.extend({ 
       initialize: function() { 
        console.log("Schedule model initialized"); 
       } 
      }), 

ScheduleView :

events : { 
       "click #cancel_login_trip" : "cancelLoginTrip", 
       "click #cancel_logout_trip" : "cancelLogoutTrip", 
      }, 

    cancelLoginTrip : function(){ 
       var tripindex = this.model.get('previousIndex')+1; 
       tripindex = "login_"+tripindex; 
       Backbone.history.navigate('schedule/cancel/'+tripindex, {trigger:true,replace:true}); 
      }, 

경로

cancelSchedule : function (tripindex) { 
      var t = tripindex.split("_"); 
      var dic={}; 
      dic.tripindex = parseInt(t[1]); 
      dic.triptype = t[0]; 
      scheduleManager.cancelSchedule(dic); 
     },  

일정 관리자 [컨트롤러] :

this.cancelSchedule = function(dic){ 
       console.log("inside cancel schedule"); 
       console.log(dic); 
       index = dic.tripindex; 
       scheduleDaysize = configManager.getFeatureConfig(Constants.SCHEDULE,Constants.SCHEDULE_DAYS_AFTER); 
       myAnalyticsLogger.debug(LogMessages.REQUEST_TO_DISPLAY_SCHEDULE + index); 
       if(index<0){ 
        var errorText= 'past schedule can not be viewed '; 
        errorModel.set({errorText:errorText,response:""}); 
        return; 
       } 
       if(index >= scheduleCollection.length && scheduleDaysize != null){    
        var errorText= 'this schedule can not be cancelled '; 
        errorModel.set({errorText:errorText,response:""}); 
        return; 
       } 
       updateScheduleOnServer(scheduleCollection.length, 
          scheduleCollection.length+scheduleDaysize); 
      }; 
+0

1. 쇼 일부 코드의 부분은 모든 응용 프로그램에 대한 글로벌 또는 특정 할 수 있습니다 글로벌 이벤트 모델

var vent = {} _.extend(vent,Backbone.Events); vent.on() vent.trigger() 

통해 것 2. 백본에 '컨트롤러'라는 것이 있다는 것을 결코 알지 못했습니다! –

+0

업데이트 질문 – shifu

+0

백본에서 '컨트롤러'로는 아무 것도 없으므로 컨트롤러 코드를 이동하여보기 밖으로 이벤트를 전달할 필요가 없습니다. –

답변

0

내 개인적인 접근 방식은 많은 작은 뷰를 생성, 그리고에 대한 것 모든 로고가있는 대형 모델 c) 중간 컨트롤러를 떨어 뜨립니다. 이 옵션을 선택하지 않으면, 이럴 디커플링의 가장 좋은 방법은 도메인