20210120(수)

2021-01-20

1. 학습 날짜

  • 2020-01-20

2. 학습 시간

  • 13:00 ~ 24:00

3. 학습 범위 및 주제

  • 닌자 프로젝트

  • 사이드바 구현

4. 학습 목표

  • 사이드바를 구현하면서 여러가지 문제를 해결해보자.

5. 학습 정리

  • x

6. 상세 학습 내용

닌자 프로젝트

  1. 프라미스 사용시 this 활용 문제(여러 경우에 사용될 수 있다.)

     export let SideBarView = Backbone.View.extend({
     el: '#side-bar-view',
    
     // view
     initialize: function() {
         if (isLoggedIn()) {
             this.user_list = new Users();
    
             let obj = this; //side_bar_views 객체를 objs에 저장.
             let result = fetchContainer('/users/logined_user_list')
             .then(function(result) {
                 for (let user of result.list) {
                     let user_model = new User(user);
                     obj.user_list.add(user_model);
                 }
                 })
             .then(function() {
                 for (let user of obj.user_list) {
                     let user_status_view = new UserStatusView({model: user})
                     obj.$el.children().append(user_status_view.render().$el);
                 }
             });
             console.log(result);
         } else {
         }
     },
     })
    • 위의 코드에서 let obj = this 라는 문구가 있다. 이 문구를 사용한 이유는 fetchContainer에서의 this의 컨텍스트가 변하기 때문에 현재 컨텍스트에 존재하는 user_list 라는 변수를 사용할 수 있게 하기 위함이다. 현재의 컨텍스트를 obj 라는 변수에 넣으면 이후의 함수 안에서는 그 함수내에 obj 라는 객체가 선언되어 있지 않기 때문에 상위 렉시컬 스코프에서 이 변수를 찾게 되므로 우리가 원하는 변수를 적절하게 찾고 이후의 작업을 수행한다.

  2. 모델과 컬렉션의 활용

    • 모델과 컬렉션을 이용해서 뷰를 만들고 한다.... 흠. 적을게 없군

  3. 액션케이블. 어떻게 하면 클라이언트가 접속하는 순간 바로 구독하지 않을 수 있는가?

    • 이 문제는 rails6의 웹패커와 관련이 있다. 솔직히 잘 모른다. 일단은 그냥 적어본다.

    • 채널을 생성하면 ~channel.js파일에 ~subscription.create 함수가 만들어진다. 함수의 이름에서 알겠지만 이 함수로 인해서 현재 클라이언트는 채널을 구독하게 된다.

    • 그리고 이 파일은 application.js 에서 import가 된다. 문제는 여기서 발생한다.

    • 웹패커는 import 하는 순간 바로 변수를 생성 하기 때문이다 => 솔직히 잘 모른다ㅋㅋ

    • 따라서 rails g channel xx 로 채널을 만드는 순간, 파일과 subscription 함수가 자동으로 만들어지고 만들어진 파일과 함수를 application에서 바로 import 하기 때문에 우리가 원하지 않아도 바로 클라이언트가 채널을 구독하게 되는 것이다.

    • 자 그럼 이제 문제가 해결됐다. import 를 하지 않으면 된다!

    • 그리고 만들어진 consumer.subscriptions.create(xx) 함수를 다른 함수로 감싸서 export 하면 이제 우리가 원할 때 이 함수를 import 해서 사용하는게 가능해진다.

  4. 마이그레이션 관리

    • 이전으로 돌아가고 그런거는 나중에 해보고.. 오늘은 추가하는 부분에 대해 학습했다.

    • 절대 명심할건, 스키마 파일을 인위적으로 수정하지 말자. 스키마 파일은 마이그레이션의 최종 결과로 사용자가 보기 편하게 만들어진 파일이다.

      • 즉 스키마는 마이그레이션의 최종 결과물인 파일이다. 만약 수정하고 싶다면 마이그레이션을 만들어서 변경해주자

    • User 모델의 속성을 추가하거나 또는 이미 존재하는 열의 default 값 또는 nullable 속성 변경을 하기 위해서는 먼저 마이그레이션 파일을 만들어주자.

    • rails g migration addStatusToUsers 라는 명령어를 입력하면, 이름에서 바로 알수있듯이 user 라는 모델에 status 라는 속성을 추가해주는 마이그레이션 파일을 만드는 것. 파일안에 들어가서 add_column 으로 추가해주자.

    • 만약 이미 존재하는 속성의 디폴트 값을 변경해주고 싶다면,

    • rails g migration changeDefaultOfStatusAsLogoutToUsers로 마이그레이션 파일을 만들고 생성된 파일로 들어가서 change ~ 뭐시기 명령어로 수정해주자.

7. 오늘 학습 내용에 대한 개인적인 총평

  • 너무 어렵다. 그래도 재밌다 화이팅하자...

8. 다음 학습 계획

  • 액션 케이블

Last updated