backbone.js에 기반한 많은 프레임 워크의 실제 강점과 약점은 무엇입니까? [닫은]


186

누군가가 최신 최신 backbone.js 변종과 경험을 공유 할 수 있기를 바랍니다. 여러 프로젝트에서 백본 / 밑줄 / 요구 사항에 대한 좋은 경험이 있으며 복잡한 응용 프로그램 구조를위한 고급 솔루션을 향한 다음 단계를 밟고 싶습니다.

다음과 같은 프레임 워크를 사용할 수 있습니다.

그리고 아마 나는 몇 가지를 놓쳤다.

차이점에 대한 짧은 소개가 있습니다.

그러나 매우 일반적입니다. 누군가가이 프레임 워크를 사용하여 실제 응용 프로그램과 경험을 공유 할 수 있는지 궁금합니다.

다른 것을 선택하면 어떤 이점이 있습니까? 마리오네트가 채플린보다 더 나은 솔루션이 될 때 또는 왜 특정 응용 분야에서 수의사가 더 나은가?

분명한 대답은 " 귀하의 요구에 가장 적합한 것을 사용 " 하는 것이지만, 이러한 프레임 워크에 대한 강점 / 목적 / 장점 또는 선호하는 시나리오를 알고있는 경험이 부족합니다.

감사!

편집 1 : 이 게시물을 찾았습니다 : Backbone.Marionette vs Backbone-Boilerplate

편집 2 : 우편으로 Mathias schafer (Chaplin)에 의해 답변 :

즉, 현재 구조는 이미 프로덕션 환경에서 사용되므로 버전 1.0에 가깝습니다. 1.0까지 새로운 기능을 추가하거나 API 변경을 중단 할 계획은 없습니다.

마리오네트는 가장 포괄적이고 안정적인 라이브러리입니다. Backbone으로 JS 앱 개발의 여러 측면을 다룹니다. 예를 들어, 백본 자체가 완전히 공극 인 강력한 뷰 레이어가 있습니다. 물론 일부 측면은 요구 사항을 충족하지 못하므로 마리오네트를 중심으로 구조를 설정해야 할 수도 있습니다.

이와 대조적으로 채플린은 백본 앱의 다소 작지만 매우 중요한 측면, 즉 전체 앱 구조 및 모듈 수명주기에 중점을 둡니다. 이와 관련하여 채플린은 매우 반대하고 라이브러리보다 프레임 워크와 비슷합니다 (예 : "코드는 라이브러리를 호출하고 프레임 워크는 코드를 호출 함"). 채플린은 개별 애플리케이션 모듈 위에 위치하고 전체 앱 상태를 제어하는 ​​몇 가지 중앙 클래스를 제공합니다. 이를 통해 앱에 Ruby on Rails와 같은 일반적인 구조가 제공됩니다.

Chaplin에서는 컨트롤러에 매핑되는 일부 경로를 선언하고 경로가 일치하면 Chaplin이 컨트롤러를 시작합니다. 또한 오래된 컨트롤러의 폐기와 컨트롤러가 생성해야하는 기본보기 표시 및 숨기기를 처리합니다. 이것이 기본 아이디어이지만 채플린은이 작업을 원활하게 수행하기 위해 추한 세부 사항을 처리합니다.

이 구조에는 두 가지 원칙이 있습니다.-모듈화, 디커플링 및 샌드 박싱-게시 / 구독 및 중재자를 사용하는 모듈 간 통신

물론 이러한 패턴은 소프트웨어 개발 세계에서 새로운 것은 아니며 채플린은 이러한 패턴을 Backbone.js 앱에 적용하는 유일한 라이브러리는 아닙니다.

Chaplin은 또한 View 레이어의 개선 된 기능을 제공합니다 (예 : 고도로 정교한 CollectionView). 그러나 전체 영역 및 레이아웃이있는 마리오네트 만큼은 아닙니다. 그러나 Chaplin Views가 제공하는 수단을 사용하여 이러한 메타 클래스를 작성하는 것은 비교적 쉽습니다.


12
+1 질문이 그 자리를 쳤다. 지난 1 ~ 2 년 동안 프레임 워크의 과대 광고는 실제로 차별화하기 어려운 수많은 건축 영감 프로젝트로 인해 상황을 불식 시켰습니다. 이것은 주석입니다 :)
kontur

답변:


132

보고있는 대부분의 프레임 워크는 동일한 문제를 해결하지만 약간 다른 목표로 약간 다른 방식으로 수행합니다.

이 모든 프로젝트가 다음과 같은 범주의 문제를 해결할 것이라고 말하는 것이 공정하다고 생각합니다.

  • 합리적인 기본 설정 제공
  • 상용구 코드 줄이기
  • BackboneJS 빌딩 블록 위에 애플리케이션 구조 제공
  • 작성자가 앱에서 사용하는 패턴 추출

2011 년 12 월 이후로 구축 한 마리오네트는 다음과 같은 매우 뚜렷한 목표와 이상을 염두에두고 있습니다.

  • 복합 애플리케이션 아키텍처
  • 엔터프라이즈 메시징 패턴 영향
  • 모듈화 옵션
  • 증분 사용 (모두 필요 없음)
  • 서버 잠금 없음
  • 기본값을 쉽게 변경할 수 있도록하십시오
  • 구성 / 오버 구성 코드

다른 프레임 워크 중 어느 것도 동일한 목표를 가지고 있지 않다는 말은 아닙니다. 그러나 마리오네트의 독창성은 이러한 목표의 조합에서 비롯된 것 같습니다.

복합 애플리케이션 아키텍처

WinForms와 C #을 사용하는 씩 클라이언트 분산 소프트웨어 시스템에서 5 년 이상 일했습니다. 데스크톱, 랩톱 (스마트 클라이언트), 모바일 장치 및 웹 응용 프로그램 용 앱을 구축했으며, 핵심 기능 세트를 공유하고 동일한 서버 백엔드와 여러 번 작업했습니다. 이번에는 모듈화의 가치를 배웠고 복합 응용 프로그램 설계의 길을 매우 빠르게 넘어 섰습니다.

기본 아이디어는 응용 프로그램의 런타임 환경을 "구성"하고 서로를 알 필요가없는 더 작은 개별 조각으로 처리하는 것입니다. 이들은 전체 복합 애플리케이션 시스템에 등록한 후 분리 된 메시지 및 호출의 다양한 수단을 통해 통신합니다.

나는 마리오네트를 백본의 복합 애플리케이션 아키텍처로 소개하면서 내 블로그에 이것에 대해 조금 썼습니다.

메시지 큐 / 패턴

동일한 대규모 분산 시스템은 메시지 큐잉, 엔터프라이즈 통합 패턴 (메시징 패턴) 및 서비스 버스를 이용하여 메시지를 처리했습니다. 이것은 무엇보다도 분리 된 소프트웨어 개발에 대한 나의 접근 방식에 막대한 영향을 미쳤습니다. 이 관점에서 단일 프로세스의 메모리 내 WinForms 응용 프로그램을보기 시작했고 곧 서버 쪽과 웹 응용 프로그램 개발이 이에 영향을 미쳤습니다.

이것은 내가 Backbone 애플리케이션 디자인을 보는 방식으로 직접 변환되었습니다. 고급 응용 프로그램 객체와 응용 프로그램 내에서 생성하는 각 모듈 모두에 대해 Marionette의 이벤트 수집기를 제공합니다.

모듈간에 보낼 수있는 메시지 (명령 메시지, 이벤트 메시지 등)에 대해 생각합니다. 또한 서버 측 통신을 이와 동일한 패턴의 메시지로 생각합니다. 일부 패턴은 이미 마리오네트로 향했지만 아직 패턴이 없습니다.

모듈화

코드의 모듈화는 매우 중요합니다. 잘 정의 된 진입 점과 출구 점이있는 단일 초점을 가진 작고 캡슐화 된 패키지를 작성하는 것은 크기와 복잡성이 큰 시스템의 필수 요소입니다.

마리오네트는 module정의를 통해 직접 모듈화를 제공합니다 . 그러나 나는 또한 RequireJS를 좋아하는 사람들도 알고 싶어합니다. 따라서 표준 빌드와 RequireJS 호환 빌드를 모두 제공합니다.


MyApp = new Backbone.Marionette.Application();

MyApp.module("MyModule", function(MyModule, MyApp, Backbone, Marionette, $, _){

  // your module code goes here

});

(아직 블로그 게시물이 없습니다)

증분 사용

이것이 마리오네트의 모든 부분에 적용되는 핵심 철학 중 하나입니다. 마리오네트 사용에 대한 "전부 또는 아무것도"요구 사항이 없습니다.

백본 자체는 모든 빌딩 블록 개체에 대해 매우 점진적이고 모듈 방식으로 접근합니다. 언제 어떤 것을 사용하고 싶은지 자유롭게 선택할 수 있습니다. 나는이 원칙을 강하게 믿고 마리오네트가 같은 방식으로 작동하도록 노력합니다.

이를 위해 Marionette에 내장 한 대부분의 작품은 독립형으로 구축되어 Backbone의 핵심 작품과 함께 작동하며 더욱 잘 작동하도록 제작되었습니다.

예를 들어, 거의 모든 백본 애플리케이션은 화면의 특정 위치에 백본보기를 동적으로 표시해야합니다. 또한 새로운 뷰를 배치 할 때 이전 뷰 닫기 및 메모리 정리를 처리해야합니다. 마리오네트가 Region등장하는 곳 입니다. 영역은 뷰를 작성하고 렌더링을 호출하고 결과를 DOM에 채우는 상용구 코드를 처리합니다. 그런 다음 뷰에 "닫기"방법이있는 경우 해당 뷰를 닫고 정리합니다.


MyApp.addRegions({
  someRegion: "#some-div"
});

MyApp.someRegion.show(new MyView());

그러나 지역을 사용하기 위해 마리오네트의 견해를 사용할 필요는 없습니다. 유일한 요구 사항은 개체의 프로토 타입 체인에서 특정 시점에 Backbone.View에서 확장하는 것입니다. close분석법, onShow분석법 또는 기타 방법 을 제공하기로 선택하면 Marionette 's Region에서 적시에 전화를 겁니다.

서버 잠금 없음

다양한 서버 기술을 기반으로 Backbone / Marionette 앱을 빌드합니다.

  • ASP.NET MVC
  • 루비 온 레일즈
  • 루비 / 시나트라
  • NodeJS / ExpressJS
  • PHP / 슬림
  • 자바
  • 에를 랑
  • ... 그리고 더

JavaScript는 브라우저에서 실행될 때 JavaScript입니다. 서버 측 JavaScript도 훌륭하지만 브라우저 기반 JavaScript를 작성하는 방법에 영향을 미치지 않습니다.

클라이언트가 사용하는 백엔드 기술과 백엔드 기술의 다양성으로 인해 어떤 이유로 든 단일 서버 측 기술 스택에 마리오네트를 고정시킬 수 없으며 잠그지 않을 것입니다. 상용구 프로젝트를 제공하지 않습니다. 루비 젬이나 npm 패키지는 제공하지 않습니다. Marionette에는 특정 백엔드 서버가 필요하지 않다는 것을 사람들이 이해하고 싶습니다. 브라우저 기반 JavaScript이며 백엔드는 중요하지 않습니다.

물론 언어와 프레임 워크에 패키지를 제공하는 다른 사람들을 전적으로 지원합니다. 나는 그 패키지를 Wiki에 나열하고 사람들이 필요에 따라 더 많은 패키지를 계속 빌드하기를 희망합니다. 그러나 그것은 마리오네트의 직접적인 지원이 아니라 지역 사회 지원입니다.

쉽게 기본값을 변경

상용구 코드를 줄이고 합리적인 기본값 (Tim Branyen의 LayoutManager에서 직접 "빌려온"아이디어)을 제공하려는 노력의 일환으로, 다른 개발자가 저와는 약간 다른 구현을 사용해야한다는 것을 알고 있습니다.

<script>기본적으로 Underscore.js 템플릿을 사용하여 템플릿의 인라인 태그를 기반으로 렌더링을 제공합니다 . 그러나 마리오네트에서 개체 Renderer및 / 또는 TempalteCache개체를 변경하여이를 대체 할 수 있습니다 . 이 두 객체는 ​​렌더링 기능의 핵심을 제공하며, 특정 템플릿 엔진 및 템플릿로드 방법에 따라이를 변경하는 방법을 보여주는 위키 페이지가 있습니다.

Marionette v0.9를 사용하면 훨씬 쉬워집니다. 예를 들어 인라인 템플릿 스크립트 블록 사용을 미리 컴파일 된 템플릿으로 바꾸려면 렌더러에서 한 가지 방법 만 교체하면됩니다.


Backbone.Marionette.Renderer.render = function(template, data){
  return template(data);
};

이제 전체 애플리케이션이 미리보기 템플릿을 사용하여 뷰의 template속성에 첨부 합니다.

비동기식 렌더링 뷰를 지원할 수있는 v0.9의 Marionette.Async 애드온도 제공합니다. 저는 마리오네트의 기본 행동을 최대한 쉽게 대체 할 수 있도록 지속적으로 노력하고 있습니다.

구성 코드

특정 상황에서 "컨벤션 오버 컨벤션"을 좋아합니다. 그것은 일을 끝내는 강력한 방법이며, 마리오네트는 솔직히 말해서 조금만 제공합니다. 다른 많은 프레임 워크, 특히 LayoutManager는 Marionette보다 구성에 대해 더 많은 규칙을 제공합니다.

이것은 목적과 의도로 이루어집니다.

의미 있고 빠른 방법으로 컨벤션을 작동시키려는 노력을 아는 데 충분한 JavaScript 플러그인, 프레임 워크, 애드온 및 애플리케이션을 구축했습니다. 속도로 수행 할 수 있지만 일반적으로 속도를 변경할 수 있습니다.

이를 위해 Marionette에 대한 "구성 코드"접근 방식을 사용합니다. 나는 동작의 변화를 바꾸는 정적 값으로 객체 리터럴을 제공 할 수있는 많은 "구성"API를 제공하지 않습니다. 대신, 주석이 달린 소스 코드와 실제 API 문서를 통해 각 객체가 가지고있는 메소드를 문서화하여 원하는 방식으로 Marionette를 변경하는 방법을 알려줍니다.

Marionette 객체에 깨끗하고 명확한 API를 제공함으로써 특정 객체 또는 Marionette의 동작을 전체적으로 대체하는 것이 비교적 간단하고 매우 유연한 상황을 만듭니다. 나는 "간단한"구성 API를 희생하여 원하는 방식으로 작동하도록 고유 코드를 제공하는 유연성을 요구합니다.

Marionette에서 "configure"또는 "options"API를 찾을 수 없습니다. 그러나 깨끗한 서명을 사용하여 각각 매우 구체적인 목적을 수행하는 많은 방법을 통해 마리오네트의 작동 방식을 쉽게 변경할 수 있습니다.


16
이것이 가장 높은 답변 인 이유는 무엇입니까? 그것은 질문에 대답하지 않습니다-그것은 기본적으로 마리오네트의 역사 / 광고입니다 ...
Jess Telford

@JessTelford 질문을 다시 읽고 싶을 수도 있습니다.
mor

@mor 질문은 What is the benefit of choosing one over the other?-이 답변은 Marionette [...] has a few very distinct goals and ideals in mind다른 프레임 워크와 한 번 자체 비교되지 않습니다. 질문 이이 프레임 워크들 각각이 무엇을 할 수 있는지 설명해주십시오 . 그렇다면, 이것은 훌륭한 답변입니다. 그러나 그렇지 않았습니다. 그리고 그렇지 않습니다.
Jess Telford

@JessTelford이 질문은 분명히 여러 답변을 요구합니다. 이것은 마리오네트가 다루는 강점과 문제점을 설명합니다. 질문을 읽은 후이 답변이 실제로 도움이되었다는 것을 알았습니다. 내 의견으로는 반드시 최고는 아니지만 그럼에도 불구하고 좋은 대답입니다. 아, 그리고 질문은 다음과 같습니다 What are the strengths and weaknesses of....
mor

@mor 잘못 이해하지 마십시오. 이것은 마리오네트에 대한 매우 철저하고 명확한 설명입니다. 나는 그것이 질문에 대답한다고 느끼지 않습니다. 여하튼, upvotes는 이것에 대한 좋은 대답입니다.
Jess Telford

25

현재 레이아웃 관리자 모듈과 핸들 바를 템플릿 엔진으로 사용하여 백본을 사용하고 있으며 기존 Grails 백엔드를 사용하여 작은 응용 프로그램을 설정하는 것이 정말 쉽다는 것을 알았습니다. 레이아웃 관리자를 사용하기 전에 마리오네트와 채플린에 대해 읽었고 둘 다 정말 강력하지만 복잡해 보였습니다. 그런 다음 왜 원래 backbone.js를 선택했는지 기억했습니다 : 단순성. 이러한 모든 프레임 워크는 백본이 의도적으로 남긴 것을 추가하고 있습니다. 프레임 워크가 나쁜 것은 아니지만 더 복잡한 것이 필요하면 개발자의 마음에 목표로 작성된 고유 한 코드베이스가 있기 때문에 ember.js 또는 sproutcore와 같은 다른 프로젝트를 시도합니다. 여기 다른 프레임 워크 위에 프레임 워크가 있습니다. 물론 백본은 애플리케이션을 구축 할뿐만 아니라보다 강력한 라이브러리를 작성하기위한 백본입니다. 그러나 레이아웃 관리자가 누락되어 뷰를 중첩 할 수 있기 때문에 뷰 레이어가 실제로 좋지 않다고 생각합니다. 레이아웃 관리자를 사용하면 그 차이가 상당히 채워집니다.

따라서 귀하의 질문에 대한 대답은 다음과 같습니다. 백본을 그대로 사용하여 시작하고 누락 된 내용과 프레임 워크에 대한 기대 사항을 스스로에게 묻습니다. 백본에 남은 것이 너무 많으면 다른 프레임 워크에서 해당 항목을 검색하여 필요에 가장 가까운 것을 선택하십시오. 그리고 여전히 선택에 확신이 없다면, 백본은 당신을위한 것이 아니며 다른 해결책을 찾아야합니다 (ember.js, sproutcore, ExtJs, JavaScript MVC가 모두 좋습니다). 클라이언트 앱 작성 경험이있는 경우 올바른 프레임 워크를 선택하기 위해 모든 프레임 워크에 대한 경험이 필요하지 않습니다 (물론)


13

Backbone.js로 구축 한 다양한 프레임 워크를 연구하고 HauteLook에서 프로젝트를위한 Vertebrae를 구축했습니다. 프로젝트 목표 : 동적 스크립트 로딩, AMD 모듈 형식, 의존성 관리, 대부분 오픈 소스 라이브러리로 빌드, 패키지로 코드 구성, 하나 이상의 단일 페이지 앱을 최적화 및 빌드, 완전히 캐시 된 서버에서 호스팅 (예 : 서버 없음) 데이터를위한 API 만 사용하고 가장 재미있는 스크립트는 프로젝트를위한 행동 중심 개발을 사용하는 것입니다. http://www.hautelooktech.com/2012/05/24/vertebrae-front-end-framework-built-with-backbone-js-and-requirejs-using-amd/에 프로젝트에 대한 설명이 있습니다 .

우리의 문제 :

선택된 라이브러리 (jQuery, Underscore.js, Backbone.js, RequireJS, Mustache)는 모듈 로딩, 종속성 관리, 애플리케이션 구조 (모델, 컬렉션, 뷰 및 라우트), API와의 비동기식 상호 작용, 비동기식 동작을 관리하기위한 다양한 유틸리티 및 객체를 제공합니다. 예를 들어 (약속) 지연, 콜백. 프레임 워크를 완성하는 데 필요한 나머지 논리는 다음과 같습니다.

  • 단일 페이지 애플리케이션의 상태를 관리하기위한 객체 (모델);
  • 보기를 제시, 정렬 / 전환 및 삭제하는 레이아웃 관리자
  • 경로에 응답하고 응용 프로그램 상태를 가져 오거나 설정하며 작업을 레이아웃 관리자에게 전달하는 컨트롤러.

Vertebrae에서 구현 된 솔루션 :

응용 프로그램 상태 관리자 -

응용 프로그램 관리자는 메모리에 데이터를 저장하고 브라우저 스토리지에 데이터를 유지하여 공통 데이터 / 메타 데이터에 대한 리소스를 제공합니다. 또한 이전 상호 작용 (예 : 선택된 탭, 적용된 필터)을 기반으로 페이지보기를 재구성하기위한 데이터 (상태)를 제공합니다. 응용 프로그램 상태 관리자는 자원이 상태를 검색하기위한 전략을 제공합니다. 상태 머신 역할을합니다.

레이아웃 관리자 -

레이아웃 관리자에는 하나 이상의 뷰와 각 (렌더링 된) 뷰에 대한 문서 (DOM) 대상이 있습니다. 페이지는 여러보기 사이에서 전환 될 수 있으므로 레이아웃 관리자는 렌더링, 렌더링, 렌더링, 표시, 표시 등의보기 상태를 추적합니다. 레이아웃 관리자를 사용하여 사이트 방문자가 요청할 가능성이 높은로드 및 렌더링 (분리)보기 (예 : 페이지의 탭 변경)를 지연시킬 수 있습니다. 뷰 상태 간 전환은이 객체에 의해 관리됩니다. 뷰 객체와 바인딩이 제거되어 가비지 수집을위한 준비 (메모리 누수 방지)를 위해 전체 레이아웃을 지울 수 있습니다. 레이아웃 관리자는 또한보기 상태를 컨트롤러와 통신합니다.

컨트롤러 -

컨트롤러 객체는 라우트 핸들러 함수에 의해 호출되며 페이지 (레이아웃)를 생성하기 위해 관련 상태 (애플리케이션 모델)를 가져 오는 역할을합니다 (라우트가 변경 될 때 상태 설정을 담당 함). 컨트롤러는 요청 된 페이지에 대한 종속 데이터 (모델 / 컬렉션) 및 생성 된 뷰 객체를 레이아웃 관리자에 전달합니다. 부작용으로 컨트롤러를 사용하면 경로 개체가 부풀어 오르거나 엉키지 않게됩니다. 경로는 컨트롤러에 매핑 된 다음 페이지보기를 시작하여 경로 처리 기능을 간결하게 유지해야합니다.

Todos 앱은 개발 모드에서 호스팅되며 Heroku에서 최적화됩니다 ...

다른 프레임 워크의 많은 개념, 예를 들어 Derick Bailey가 지적한 메모리 누수를 미리보기 위해 뷰를 destory해야 할 필요성이 생겼습니다 . http://lostechies.com/derickbailey/ ; Tim Branyen의 레이아웃 관리자 http://tbranyen.github.com/backbone.layoutmanager/

요약하면 Backbone.js는 응용 프로그램의 도구로 사용됩니다. Backbone.js 라이브러리는 응용 프로그램을 작성하는 데 필요한 모든 아키텍처를 제공하지는 않지만 API 및 견고한 코드 구조와 큰 상호 작용을 제공합니다 ... 뷰 (컨트롤러처럼 작동) 및 데이터 계층 모델 및 컬렉션, 마지막으로 경로. 우리는 프로젝트의 목표를 달성하기 위해 Vertebrae를 구축했으며, 다른 사람들이 사용, 학습 또는 무엇이든 할 수있는 프레임 워크로 코드를 추출하기로 결정했습니다.

내 의견으로는 귀하의 질문에 대한 답변은 모든 프레임 워크에서 배우고 목표를 달성하는 데 필요한 것을 사용하는 것입니다. 프로젝트 목표가 Backbone으로 빌드 된 프레임 워크 중 하나와 밀접하게 일치하고 그렇지 않으면 자신의 프레임 워크를 작성하는 경우 커뮤니티가 공유하는 훌륭한 사례가 있습니다. 또는 응용 프로그램의 방향에서 약간의 손실을 발견하면 Ember.js와 같이 더 의견이 많고 구조화 된 것을 선택하십시오. 가장 좋은 점은 JavaScript로 (MVX) MVC와 같은 패턴을 사용하여 코딩하는 데 도움이되는 다양한 선택 항목이 있다는 것입니다.


자세한 답변 주셔서 감사합니다.
danikoren

13

나는 BenchPrep에서 작업하면서 Luca 프레임 워크 를 개발하여 backbone.js 라이브러리 위에 여러 개의 단일 단일 페이지 앱을 개발했습니다.

나는 몇 년 전에 ExtJS와 함께 일해 왔으며 뷰를 독립형 구성 요소로 개발 한 다음 컨테이너 뷰를 사용하여 다른 구성 요소와 결합하는 구성 요소 기반 아키텍처와 같은 해당 프레임 워크에서 내가 좋아하는 개념을 훔쳤습니다. 또한 구성에 크게 의존하기 때문에 Luca에서 앱을 개발하는 것은 JSON으로 객체를 설명하는 것과 매우 흡사합니다.

이 방법의 장점 중 하나는 Backbone의 extend를 사용하여 약간의 변경만으로 여러 앱 또는 앱의 다른 위치에서 구성 요소를 재사용 할 수 있다는 것입니다. JSON 구성을 약간만 조정하여 구성 요소의 다양한 레이아웃 / 프레젠테이션을 실험하는 것도 매우 쉽습니다.

광범위한 도우미 / 유틸리티 기능 외에도 Luca는 복잡한 UI를 구축하기 위해 상상할 수있는 방식으로 조합 할 수있는 많은 고급 백본 파생물을 제공합니다.

뷰, 컴포넌트, 컨테이너

  • 기능 보강 된 모델, 뷰, 컬렉션, 라우터 클래스
  • 모델, 컬렉션, 뷰, 응용 프로그램 및 해당 관리자 간의 통신을 용이하게하는 구성 옵션.
  • 컨테이너 (분할 / 열 레이아웃, 격자 레이아웃, 탭보기, 카드 / 마법사보기)
  • 모든 표준 필드 구성 요소가 포함 된 FormView 및 Backbone과 동기화하기위한 도우미
  • Luca.Collection에서 스크롤 가능한 격자 요소를 생성하기위한 GridView
  • 컬렉션을 기반으로 뷰를 생성하기위한 CollectionView
  • 툴바 / 버튼

트위터 부트 스트랩 스타일과 마크 업 무료

  • Luca는 Twitter 부트 스트랩 프레임 워크와 매우 잘 작동합니다. Luca.enableBootstrap = true를 설정하고 CSS를 포함하면 탭 뷰, 도구 모음, 단추, 양식, 필드, 격자 등과 같은 구성 요소가 Twitter 부트 스트랩 호환 마크 업 및 CSS 클래스 규칙을 자동으로 사용합니다.
  • 그리드 시스템을 레이아웃으로 사용하고 대부분의 부트 스트랩 기본 CSS 클래스에 지능적인 방식으로 응답
  • Luca.Viewport 및 GridLayout 구성 요소는 부트 스트랩의 반응 형, 유동 또는 정적 그리드 시스템과 작동하도록 설정되어 있습니다.
  • 트위터 부트 스트랩 구성 요소에 일대일 대응을 제공하여 구성 가능한 백본 뷰로 표시하도록 목표로합니다.

응용 프로그램 구성 요소

  • Backbone.Model 기반 상태 머신은 애플리케이션 제어 흐름 스타일로 getter / setter 메소드 및 속성 변경 이벤트를 제공합니다.
  • Backbone.Router 또는 State Machine 이벤트에 대한 응답으로 앱의 페이지를 숨기거나 표시하는 통합 컨트롤러 구성 요소
  • 생성 한 컬렉션을 추적하고 범위를 정하고 그룹화하며 기본 매개 변수를 할당 할 수있는 통합 컬렉션 관리자
  • 웹 소켓 서비스 위에 추상화 계층 인 소켓 관리자로 Backbone처럼 쉽게 푸시 할 수 있습니다.
  • 그러한 이벤트에 응답해야하는 구성 요소에서 명명 된 키 이벤트를 트리거하는 키보드 이벤트 라우터

수집 및 모델 향상

  • 컬렉션은 backbone-query 기반으로 , mongoDb와 매우 유사한 쿼리 인터페이스를 제공합니다.
  • collection.localStorage = true를 설정하여 로컬 스토리지 Backbone.sync를 활성화하십시오.
  • 페이지로드시 데이터가 부트 스트랩되는 자동 콜렉션 콜렉션
  • 캐시 된 메소드 / 계산 된 속성. 콜렉션 메소드의 결과를 캐시하고 콜렉션 또는 해당 모델의 이벤트 변경 / 추가 / 제거에 응답하여 캐시를 만료시킵니다.
  • 모델의 계산 된 속성. 복잡한 기능을 기반으로 속성을 구축하고 변경에 따라 계산 된 값을 자동으로 업데이트

이벤트 및 훅

Luca 구성 요소는 기본 Backbone 구성 요소와 비교할 때 발생하는 이벤트에 대해보다 자유 롭습니다. 이들은 before : initialize, after : initialize, before : render, after : render, activation, first : activation, deactivation, first : deactivation과 같은 이벤트를 생성하므로 구성 요소의 동작을보다 세밀하게 조정할 수 있습니다. 또한 뷰의 @hooks porperty에서 이벤트를 정의하면 비슷한 이름의 함수가있는 경우 자동으로 호출됩니다. 이것은 가독성을 향상시키는 많은 콜백 스타일 코드를 방지합니다.

또한 글로벌 게시 / 구독 채널에 이벤트를 게시하도록 Luca.Events 클래스를 구성 할 수 있으므로 큰 응용 프로그램을보다 쉽게 ​​구축하고 모듈 간 통신을 지원할 수 있습니다.

루비 보석

Luca는 Rails 및 Sinatra API에 대해 작업하는 동안 특별히 개발되었으며 이로 인해 현재 특정 스택에 최적화되어 있지만 결코 특정 서버에 고정되지는 않습니다.

Luca는 자산 파이프 라인에서 작동하도록 구성된 Ruby Gem의 일부 또는 다운로드 가능한 JS 파일로 배포됩니다.

Rails 또는 Sinatra를 사용할 필요는 없습니다. 그러나 당신이한다면, 나는 많은 유용한 것들을 포함 시켰습니다.

  • 확장명이 .luca 인 파일은 JST 스타일 변수 보간을 사용하여 HAML로 처리됩니다. 자산 파이프 라인에 의한 (.jst.ejs.haml과 동일)
  • 많은 백본 및 언더 스코어 테스트 도우미와 함께 브라우저 또는 헤드리스 Jasmine 기반 유닛 테스트 용 테스트 하네스.
  • Luca와 함께 제공되는 개발 툴셋을위한 API 엔드 포인트 (나중에 자세히 설명)
  • 최소한의 구성으로 Redis를 Luca.Collection의 스키마없는 스토리지 엔진으로 사용할 수있는 API 엔드 포인트

개발 도구

  • Luca 응용 프로그램은 Luca 응용 프로그램 및 구성 요소를 모니터링, 검사, 디버깅하는 데 도움이되는 Luca 특정 도우미 및 명령을 사용하여 브라우저 커피 스크립트 콘솔을 활성화 할 수 있습니다.

CoffeeScript로 구동되는 브라우저 개발 콘솔의 Luca 예제

  • Rails Gem과 Luca의 CodeMirror 기반 컴포넌트 편집기를 사용하면 Coffeescript를 사용하여 브라우저에서 직접 Luca Framework의 소스 코드와 애플리케이션 특정 컴포넌트를 편집 할 수 있습니다. 업데이트 된 프로토 타입으로 영향을받는 객체의 인스턴스를 새로 고치면 편집 내용에 대한 즉각적인 피드백이 표시되며 변경 사항을 디스크에 저장할 수 있습니다.

  • 구성 요소 테스터는 응용 프로그램을 구성하는 구성 요소를 분리하여 사용할 수있는 라이브 샌드 박스입니다. 구성 요소의 프로토 타입 수정, 종속성 설정 및 구성 요소 구성 도구를 제공합니다. 구성 요소는 편집 할 때마다 즉시 다시 렌더링됩니다. 브라우저에서 직접 CSS뿐만 아니라 구성 요소가 생성하는 마크 업을보고 편집하고 변경 사항을 즉시 볼 수 있습니다. 이것은 매우 유용한 실험 도구입니다.

  • 구성 요소 테스터는 곧 Jasmine과 통합되므로 코드를 편집 할 때 구성 요소 단위 테스트 결과를 실시간으로 볼 수 있습니다

구성 요소 테스터의 스크린 샷

Luca는 진행중인 작업이지만 안정적인 API (아직 1.0 아님)를 유지하며 여러 대규모 프로덕션 앱에서 사용되었습니다. 그것은 매우 의견이 많은 프레임 워크이지만 더 모듈화되도록 노력하고 있습니다. 설명서 및 샘플 구성 요소를 적극적으로 연구하고 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.