Các thực tiễn tốt nhất để cấu trúc một ứng dụng Meteor lớn với nhiều tệp mẫu HTML là gì? [đóng cửa]


165

Trong tất cả các ví dụ (bảng xếp hạng, trò chơi chữ, v.v.) họ có một tệp mẫu HTML duy nhất. Có một số dự án sao băng nguồn mở lớn với nhiều tệp mẫu HTML khác nhau mà chúng ta có thể sử dụng làm ví dụ thực tiễn tốt nhất không? Có vẻ không thực tế để đặt mọi thứ mà một ứng dụng lớn cần tất cả trong một tệp mẫu.


sao băng là công cụ mới, tôi havenot tìm bất cứ điều gì liên quan đến thực hành tốt nhất về .I này cũng mong đợi một số guildline về vấn đề này
newlife

10
Bạn đã đọc phần về Cấu trúc ứng dụng của bạn trong hướng dẫn chưa? Có một số giải thích về việc quét và ghép các tệp HTML.
zwippie

1
Hướng dẫn chính thức của sao băng cho thấy một cấu trúc tập tin rất mát mẻ. Kiểm tra tại đây: guide.meteor.com/structure.html#javascript-structure
Waqas

Câu trả lời:


16

Gói tất cả lại với nhau! Từ các tài liệu:

> HTML files in a Meteor application are treated quite a bit differently
> from a server-side framework. Meteor scans all the HTML files in your
> directory for three top-level elements: <head>, <body>, and
> <template>. The head and body sections are seperately concatenated
> into a single head and body, which are transmitted to the client on
> initial page load.
> 
> Template sections, on the other hand, are converted into JavaScript
> functions, available under the Template namespace. It's a really
> convenient way to ship HTML templates to the client. See the templates
> section for more.

29
Đây là mối quan tâm của bưu điện mặc dù. Nhảy là ổn, nhưng bạn có thể thấy những gì xảy ra với Asana - nó yêu cầu màn hình tải trong khi tải xuống> 1MB mã khách hàng. Điều đó không được chấp nhận đối với nhiều trang web. Chúng ta sẽ xem liệu chúng ta có thể thực hiện một số thao tác tải sau khi tải màn hình chính hay không, nhưng tôi nghi ngờ ngay bây giờ. Tôi nghĩ rằng nó sẽ cần phải là một tính năng để phá vỡ mọi thứ một chút.
Dave Sanders

36
Câu trả lời này là kết quả số 1 trong google nhưng nó đã lỗi thời một cách đáng tin cậy. Khác, du khách tương lai như tôi; nhìn bên dưới
Kloar

Kể từ 1.1.0.2, ứng dụng công việc đơn giản mà họ demo đã chuyển 1,7 MB tệp khi bạn tải lại cứng với bộ đệm của trình duyệt đã bị xóa. Điều này là không thể chấp nhận được cho rất nhiều trường hợp sử dụng ngoài kia. : / Mọi thứ được cải thiện nhiều khi tài sản được lưu trữ, nhưng ở lần tải đầu tiên, nó khá tàn bạo.
Jason Kim

Ý tưởng: sử dụng gói web, tạo gói cho mọi thứ, lười tải chúng khi cần.
trusktr

vâng, Asana phải mất một thời gian để tải. Asana cũng là một ứng dụng phản ứng cực kỳ hoàn hảo, trong đó người dùng đã tạo 175 triệu tác vụ trong năm 2014. Các ứng dụng tải nhanh hơn không phải lúc nào cũng tốt hơn. Phải mất một chút thời gian để các ứng dụng khởi động trên điện thoại của bạn. Mọi người sẽ quen với nó.
Max Hodges

274

Như trong faq sao băng không chính thức, tôi nghĩ nó giải thích khá nhiều về cách cấu trúc một ứng dụng lớn:

Tôi nên đặt các tập tin của tôi ở đâu?

Các ứng dụng ví dụ trong sao băng rất đơn giản và không cung cấp nhiều thông tin chi tiết. Đây là suy nghĩ hiện tại của tôi về cách tốt nhất để làm điều đó: (mọi đề xuất / cải tiến đều rất đáng hoan nghênh!)

lib/                       # <- any common code for client/server.
lib/environment.js         # <- general configuration
lib/methods.js             # <- Meteor.method definitions
lib/external               # <- common code from someone else
## Note that js files in lib folders are loaded before other js files.

collections/               # <- definitions of collections and methods on them (could be models/)

client/lib                 # <- client specific libraries (also loaded first)
client/lib/environment.js  # <- configuration of any client side packages
client/lib/helpers         # <- any helpers (handlebars or otherwise) that are used often in view files

client/application.js      # <- subscriptions, basic Meteor.startup code.
client/index.html          # <- toplevel html
client/index.js            # <- and its JS
client/views/<page>.html   # <- the templates specific to a single page
client/views/<page>.js     # <- and the JS to hook it up
client/views/<type>/       # <- if you find you have a lot of views of the same object type
client/stylesheets/        # <- css / styl / less files

server/publications.js     # <- Meteor.publish definitions
server/lib/environment.js  # <- configuration of server side packages

public/                    # <- static files, such as images, that are served directly.

tests/                     # <- unit test files (won't be loaded on client or server)

Đối với các ứng dụng lớn hơn, chức năng riêng biệt có thể được chia thành các thư mục con được tổ chức bằng cùng một mẫu. Ý tưởng ở đây là cuối cùng mô-đun chức năng có thể được đưa vào một gói thông minh riêng biệt, và lý tưởng nhất, được chia sẻ xung quanh.

feature-foo/               # <- all functionality related to feature 'foo'
feature-foo/lib/           # <- common code
feature-foo/models/        # <- model definitions
feature-foo/client/        # <- files only sent to the client
feature-foo/server/        # <- files only available on the server

Tìm hiểu thêm: Câu hỏi thường gặp về sao băng không chính thức


12
IMHO này là tốt hơn so với câu trả lời được chấp nhận. Tôi sẽ thử nó ngay bây giờ.
hakan

17
Kể từ 0.6.0, bạn tốt hơn hết là tránh sự lộn xộn đó và chạy ứng dụng của bạn hoàn toàn khỏi các gói thông minh. Tôi đi vào chi tiết hơn một chút trong bài đăng trên blog này: matb33.me/2013/09/05/meteor-project-structure.html
matb33

1
bất cứ ai có một đầu mối để đặt mobile-config.js?
Dude

1
Cảm ơn câu trả lời và liên kết đến faq không chính thức (Tôi là người mới trong thế giới của thiên thạch), ý nghĩa của "mã chung từ người khác" là gì? Cảm ơn!
Cohars

3
Đối với sao băng 1.3, tôi sẽ nói rằng điều này đã lỗi thời do nhập mô-đun ES6. Xem bài viết hướng dẫn sao băng về cấu trúc ứng dụng: guide.meteor.com/structure.html
Samuel

36

Tôi đồng ý với yagooar, nhưng thay vì:

client / application.js

Sử dụng:

khách hàng / main.js

tập tin chính. * được tải sau cùng. Điều này sẽ giúp đảm bảo rằng bạn không có bất kỳ vấn đề nào về thứ tự tải. Xem tài liệu về Sao băng, http://docs.meteor.com/#structuringyourapp , để biết thêm chi tiết.


26

Sao băng được thiết kế để bạn cấu trúc ứng dụng của mình theo bất kỳ cách nào bạn muốn. Vì vậy, nếu bạn không thích cấu trúc của mình, bạn có thể chỉ cần di chuyển một tệp sang một thư mục mới hoặc thậm chí chia một tệp thành nhiều phần, và sao cho nó hoàn toàn giống nhau. Chỉ cần lưu ý cách xử lý đặc biệt của máy khách, máy chủ và thư mục công cộng như được chỉ định trong trang tài liệu chính: http://docs.meteor.com/ .

Chỉ cần kết hợp mọi thứ lại với nhau trong một lần điền HTML chắc chắn sẽ không nổi lên như một cách thực hành tốt nhất.

Đây là một ví dụ về một cấu trúc có thể có: trong một trong các ứng dụng của tôi, một diễn đàn thảo luận, tôi tổ chức theo mô-đun hoặc "loại trang" (trang chủ, diễn đàn, chủ đề, nhận xét), đặt tệp .css, .html và .js cho mỗi tệp loại trang với nhau trong một thư mục. Tôi cũng có một mô-đun "cơ sở", chứa mã .css và .js phổ biến và khuôn mẫu chính, sử dụng {{renderPage}} để kết xuất một trong các mô-đun khác tùy thuộc vào bộ định tuyến.

my_app/
    lib/
        router.js
    client/
        base/
            base.html
            base.js
            base.css
        home/
            home.html
            home.js
            home.css
        forum/
            forum.html
            forum.js
            forum.css
        topic/
            topic.html
            topic.js
            topic.css
        comment/
            comment.html
            comment.js
            comment.css

Bạn cũng có thể tổ chức theo chức năng

my_app/
    lib/
        router.js
    templates/
        base.html
        home.html
        forum.html
        topic.html
        comment.html
    js/
        base.js
        home.js
        forum.js
        topic.js
        comment.js
    css/
        base.css
        home.css
        forum.css
        topic.css
        comment.css

Tôi hy vọng một số cấu trúc thực hành tốt nhất cụ thể hơn và các quy ước đặt tên sẽ xuất hiện mặc dù.


2
Đây là câu trả lời yêu thích của tôi. Một trong những điều yêu thích của tôi về Sao băng là bạn có thể cấu trúc các tệp của mình theo cách phù hợp với bạn.
CaptSaltyJack

Tôi thích câu trả lời này. Tôi đã làm nó theo cách đầu tiên.
Sung Cho

những thứ liên quan nên gần nhau. Câu trả lời của tôi giống như của bạn nhưng ngược lại.
Max Hodges

1,3 lib lib được ưu tiên cho hướng dẫn nhập khẩu.meteor.com / struct.html.htmlexex
Jeremy Iglehart

Tôi không thấy giá trị trong việc đặt tên nhiều tệp với tên tính năng như "chủ đề". Bây giờ nếu bạn muốn thay đổi tên tính năng thành "danh mục", bạn phải thay đổi nhiều tên tệp. Chỉ cần sắp xếp chúng trong một thư mục duy nhất gọi là "topic" và đặt tên chung chung: event.js, Views.html, style, css, Rout.js, v.v. xem câu trả lời của tôi để biết thêm.
Tối đa

14

Dành cho tất cả những ai đang tham gia chủ đề này:

Công emcụ dòng lệnh (của EventedMind, những kẻ đứng sau Bộ định tuyến sắt) rất hữu ích khi tạo ra Ứng dụng sao băng mới. Nó sẽ tạo ra một cấu trúc tập tin / thư mục đẹp. Nếu bạn đã làm việc trên một ứng dụng và muốn tổ chức lại nó, chỉ cần thiết lập một dự án mới emvà bạn có thể sử dụng nó cho cảm hứng.

Xem: https://github.com/EventedMind/em

Và tại đây: /programming/17509551/what-is-the-best-way-to- Organize-temsheet-in-meteor-js


4
Lưu ý: điều này đã được thay thế bằng sắt-cli (cùng tác giả). Xem: github.com/iron-meteor/iron-cli
j0e

Có, 'em' đã được đổi tên thành iron-cli, cùng một công cụ.
Mikael Lirbank

11

Tôi nghĩ rằng cấu trúc tệp từ Sách thiên thạch Khám phá thực sự tốt và là một khởi đầu vững chắc.

/app: 
 /client
   main.html
   main.js
 /server 
 /public
 /lib
 /collections
  • Mã trong thư mục / server chỉ chạy trên máy chủ.
  • Mã trong thư mục / client chỉ chạy trên máy khách.
  • Mọi thứ khác chạy trên cả máy khách và máy chủ.
  • Các tập tin trong / lib được tải trước bất cứ thứ gì khác.
  • Bất kỳ tập tin chính. * Được tải sau khi mọi thứ khác.
  • Tài sản tĩnh của bạn (phông chữ, hình ảnh, v.v.) đi vào thư mục / công khai.

10

Tạo gói

Tất nhiên không phải mọi thứ đều phù hợp với phương pháp này, nhưng trong các ứng dụng lớn, bạn sẽ có rất nhiều chức năng có thể tách rời. Bất cứ điều gì có thể tách rời và tái sử dụng phù hợp trong các gói, phần còn lại đi trong cấu trúc thư mục thông thường, như được đề cập trong các câu trả lời khác. Ngay cả khi bạn không tạo các gói để tránh chi phí hoạt động, cấu trúc mã theo cách mô đun là một ý tưởng hay (xem các đề xuất này )

Meteor cho phép kiểm soát chi tiết về cách bạn tải các tệp của mình (thứ tự tải, trong đó: máy khách / máy chủ / cả hai) và gói xuất khẩu.

Tôi đặc biệt thấy rất tiện dụng cách dễ dàng để chia sẻ logic giữa các tệp liên quan. Ví dụ, bạn muốn tạo một số chức năng sử dụng và sử dụng trong các tệp khác nhau. Bạn chỉ cần làm cho nó "toàn cầu" (không có var) và Meteor sẽ bao bọc nó trong không gian tên của gói, vì vậy nó sẽ không gây ô nhiễm không gian tên toàn cầu

Đây là tài liệu chính thức


6

Sau một thời gian ra khỏi mã hóa sao băng, tôi rất vui khi có chút thời gian rảnh rỗi để xây dựng một trò chơi trực tuyến khá phức tạp. Cấu trúc ứng dụng là một trong những mối quan tâm đầu tiên của tôi và có vẻ như một số lập trình viên rất giỏi đã chiến thắng phương pháp cấu trúc một ứng dụng chỉ dành cho gói, cho phép bạn ghép các gói khác nhau một cách lỏng lẻo. Có những lợi thế khác cho cách tiếp cận, và 2 bài viết rất hay giải thích về cách tiếp cận có thể được tìm thấy ở đây:

http://www.matb33.me/2013/09/05/meteor-project-structure.html http://www.manuel-schoebel.com/blog/meteorjs-package-only-app-structure-with-meduler -mẫu


6

Chúng tôi có một dự án lớn (có lẽ là một trong những dự án lớn nhất mà mọi người đã xây dựng cho đến nay vì nó đã được phát triển toàn thời gian trong 1,5 năm). Chúng tôi sử dụng cùng một tên tệp trong mỗi chế độ xem. Điều đó rất nhất quán và giúp chúng tôi nhanh chóng điều hướng đến chính xác những gì chúng tôi đang tìm kiếm:

  • event.js
  • helpers.js
  • samples.html
  • Rout.js
  • phong cách
  • Vân vân.

Trông như thế này trong một dự án:

       ├── hợp nhấtRequests
       ├── event.js
       ├── helpers.js
       ├── bộ định tuyến.js
       └── mẫu.html
       ├── khách hàng
       └── bộ định tuyến.js
       Bảng điều khiển
       ├── event.js
       ├── helpers.js
       ├── onDestroyed.js
       ├── onRendered.js
       ├── bộ định tuyến.js
       └── mẫu.html
       ├── email Xác minh
       ├── event.js
       ├── helpers.js
       ├── bộ định tuyến.js
       └── mẫu.html
       Đang tải
       Styles ├── style.css
       └── mẫu.html
       ├── hộp thư
       │ ├── autoform.js
       ├── hợp nhấtRequestConf Confirmation
       │ ── event.js
       │ ├── helpers.js
       │ ├── onCreated.js
       │ │ ├── onRendered.js
       │ ── mẫu.html
       ├── event.js
       ├── helpers.js

Các mẫu liên quan chỉ được lưu trữ cùng nhau trong cùng một tệp. Nội dung view/order/checkout/templates.htmlhiển thị bị sụp đổ ở đây:

<template name="orderCheckout"></template>

<template name="paymentPanel"></template>

<template name="orderCheckoutSummary"></template>

<template name="paypalReturnOrderCheckout"></template>

Chúng tôi sử dụng các thư mục con khi chế độ xem phức tạp với nhiều phần:

       Giỏ hàng
       │ ├── addItem
       │ │ ─── autoform.js
       │ ── event.js
       │ ├── helpers.js
       │ │ ├── onRendered.js
       │ ├── bộ định tuyến.js
       Styles │ ─ ─
       │ ── mẫu.html
       │ ├── kiểm tra
       │ │ ─── autoform.js
       │ ── event.js
       │ ├── helpers.js
       │ │ ├── onRendered.js
       │ ├── bộ định tuyến.js
       │ ── mẫu.html
       View ─── xem
       │ ├── autoform.js
       ├── xóa nó
       │ ── event.js
       │ ├── helpers.js
       │ ── mẫu.html
       ├── chỉnh sửa
       │ │ ─── autoform.js
       │ ── event.js
       │ ├── helpers.js
       │ ── mẫu.html
       ├── event.js
       ├── helpers.js
       ├── onDestroyed.js
       ├── onRendered.js
       ├── bộ định tuyến.js
       Styles ├── style.less
       └── mẫu.html

Chúng tôi cũng phát triển với WebStorm, một trình soạn thảo cực kỳ mạnh mẽ và linh hoạt để phát triển Thiên thạch. Chúng tôi thấy nó vô cùng hữu ích khi tìm kiếm và tổ chức mã của chúng tôi và làm việc hiệu quả. Chế độ xem web

Rất vui được chia sẻ chi tiết theo yêu cầu.


3
Vui lòng xem xét thêm một bình luận nếu bạn nghĩ rằng câu trả lời này có thể được cải thiện.
Max Hodges

Bài đăng tuyệt vời. Câu hỏi: Sau tất cả thời gian này với sao băng, bạn vẫn đề xuất nó cho các dự án lớn, như thương mại điện tử? Hoặc xem xét việc sử dụng một khung công tác có thể mang lại cho bạn "quyền tự chủ" hơn như LoopBack hoặc thậm chí là Happi.
Liko

chúng tôi yêu thích Thiên thạch và làm tất cả những phát triển mới trong đó. Thật không may, tôi không đủ quen thuộc với LoopBack hoặc Happi để có ý kiến.
Max Hodges

1
LoopBacks tập trung vào các API nghỉ ngơi từ đầu đến cuối làm cho nó nghe giống như một khung phát triển web truyền thống (như RoR). RoR có API REST đúng, nhưng chúng tôi cảm thấy sao băng có thời gian thực.
Max Hodges

Cảm ơn vì bạn đã phản hồi. Bạn tổ chức phía máy chủ cho các tính năng quá?
Liko

5

Sử dụng giàn giáo sắt-cli CLI. Có làm cho mọi thứ rất dễ dàng.

https://github.com/iron-meteor/iron-cli

Một lần được cài đặt. sử dụng iron create my-appđể tạo một dự án mới. Nó sẽ tạo ra cấu trúc sau cho bạn. Bạn cũng có thể sử dụng điều này trên các dự án hiện có. sử dụng iron migratetrong thư mục dự án.

my-app/    
 .iron/    
   config.json    
 bin/    
 build/    
 config/    
   development/    
     env.sh    
     settings.json    
 app/    
   client/    
     collections/    
     lib/    
     stylesheets/    
     templates/    
     head.html    
   lib/    
     collections/    
     controllers/    
     methods.js    
     routes.js    
   packages/    
   private/    
   public/    
   server/    
     collections/    
     controllers/    
     lib/    
     methods.js    
     publish.js    
     bootstrap.js

Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
user2314737

@ user2314737 Hét lên để nói rằng người trả lời đã chỉnh sửa bài đăng của mình. Bây giờ nó bao gồm các dữ liệu cần thiết cho vấn đề trong tay.
Kyll

4

Tôi đang theo định dạng nồi hơi mattdeom, đã bao gồm bộ định tuyến & Mô hình sắt (Collection2). Xem bên dưới :

client/                 # Client folder
    compatibility/      # Libraries which create a global variable
    config/             # Configuration files (on the client)
    lib/                # Library files that get executed first
    startup/            # Javascript files on Meteor.startup()
    stylesheets         # LESS files
    modules/            # Meant for components, such as form and more(*)
    views/              # Contains all views(*)
        common/         # General purpose html templates
model/                  # Model files, for each Meteor.Collection(*)
private/                # Private files
public/                 # Public files
routes/                 # All routes(*)
server/                 # Server folder
    fixtures/           # Meteor.Collection fixtures defined
    lib/                # Server side library folder
    publications/       # Collection publications(*)
    startup/            # On server startup
meteor-boilerplate      # Command line tool

3

Có rất nhiều cách tiếp cận khác nhau để cấu trúc ứng dụng của bạn. Ví dụ: nếu bạn có bộ định tuyến và các mẫu trang khác nhau, và bên trong mỗi mẫu trang của bạn có nhiều phần trang, v.v., tôi sẽ cấu trúc nó phụ thuộc vào ngữ nghĩa từ cấp cao hơn> cấp thấp hơn ..

Ví dụ:

client
  views
    common
      header
        header.html
        header.js
        header.css
      footer
        footer.html
        footer.js
        footer.css
    pages
      mainPage
        mainPage.html
        mainPage.js
        mainPage.css
        articles
          articles.html
          articles.js
          articles.css
        news
          news.html
          news.js
          news.css
     ...

Tất nhiên, bạn có thể đặt các mẫu tin tức của mình vào thư mục chung, vì bạn có thể sử dụng mẫu tin tức của mình trên các trang khác nhau.

Tôi nghĩ rằng đó là cách tốt nhất để bạn cấu trúc ứng dụng của mình theo cách bạn cảm thấy thoải mái.

Tôi đã viết một ứng dụng nhỏ ở đây: http://gold.meteor.com Và nó rất nhỏ, tôi chỉ sử dụng một tệp html và chỉ một tệp template.js .. :)

Tôi hy vọng nó sẽ giúp một chút


Tôi không thấy giá trị trong việc đặt tên nhiều tệp với tên tính năng như "bài viết". Bây giờ nếu bạn muốn thay đổi tên tính năng thành "bài đăng", bạn phải thay đổi tên tệp. Chỉ cần sắp xếp chúng trong một thư mục duy nhất gọi là "bài viết" và đặt tên cho chúng là "event.js", Views.html, kiểu, css, v.v. xem câu trả lời của tôi để biết thêm.
Max Hodges

3

Có một lớp mới về Tâm trí có tên gọi là Thiết lập các dự án sao băng nhằm giải quyết vấn đề này nhưng cũng nói về cấu hình dự án và thiết lập môi trường phát triển của bạn.

Từ video Cấu trúc ứng dụng trong lớp: Meteor không có ý kiến ​​rất mạnh mẽ về cách ứng dụng của bạn nên được cấu trúc nhưng đây là một số quy tắc:

1) Thứ tự tải - Trước tiên, Thiên thạch đi đến vị trí sâu nhất trong thư mục tệp và xử lý các tệp theo thứ tự bảng chữ cái

2) máy khách và máy chủ là các thư mục đặc biệt mà Meteor nhận ra

Cấu trúc của chúng tôi trông như thế này:

both/
    collections/
        todos.js
    controllers/
        todos_controller.js
    views/
        todos.css
        todos.html
        todos.js
    app.js - includes routes
client/
    collections/
    views/
        app.js
server/
    collections/
    views/
        app.js
packages/
public/

Mã thông báo todos_controll mở rộng RouteContoder, một cái gì đó đi kèm với Bộ định tuyến sắt.

Công emcụ được đề cập ở trên cũng đang nhận được một bản cập nhật lớn ngay bây giờ và sẽ tốt hơn nhiều và có sẵn tại: https://github.com/EventedMind/em


những gì xem bên trong / máy chủ / lượt xem /?
stefcud

Tôi không thấy giá trị trong việc đặt tên nhiều tệp với tên tính năng như "todos". Bây giờ nếu bạn muốn thay đổi tên tính năng thành "tác vụ", bạn phải thay đổi 5 tên tệp. Chỉ cần sắp xếp chúng trong một thư mục duy nhất gọi là "todos" và đặt tên cho chúng là "event.js", Views.html, style, css, v.v. xem câu trả lời của tôi để biết thêm.
Max Hodges

1

Tôi cũng đang tìm kiếm các thực tiễn tốt nhất để nâng cao và mở rộng các ứng dụng của mình thông qua một kiến ​​trúc được hình thành tốt. Tất cả các thực tiễn được đề cập ở trên hoạt động cho các ứng dụng cỡ nhỏ đến trung bình nhưng sẽ thất bại khi bạn làm việc trong một nhóm lớn hơn. Có một số cách tôi đã thử:

1) Tôi đã theo chiến lược này: https://github.com/aldeed/meteor-autoform để mở rộng và sử dụng lại các mẫu. Tác giả có một ý tưởng rất tốt về thiết kế thành phần và lĩnh vực. Tôi hiện đang triển khai nó vì cộng đồng đã phát triển 36 gói bao gồm hầu hết mọi trường hợp và tôi có thể sử dụng TypeScript để được an toàn trong giai đoạn phát triển.

<template name="autoForm">
  {{#unless afDestroyUpdateForm this.id}}
  {{! afDestroyUpdateForm is a workaround for sticky input attributes}}
  {{! See https://github.com/meteor/meteor/issues/2431 }}
  <form {{atts}}>
    {{> Template.contentBlock ..}}
  </form>
  {{/unless}}
</template>

Đây là một bài đăng blog tốt về cách thực hiện: http://blog.east5th.co/2015/01/13/custom-block-helpers-and-meteor-composability/ cũng như tại đây: http: // metsengpedia .com / đọc / Blaze_Note

2) Cái này có vẻ rất hứa hẹn nhưng gần đây không được cập nhật. Nó là một gói được viết bằng kịch bản cà phê được gọi là. Các thành phần Blaze ( https://github.com/peerl Library / moror-blaze-components ) cho Meteor là một hệ thống để dễ dàng phát triển các thành phần UI phức tạp cần được sử dụng lại xung quanh ứng dụng Meteor của bạn. Bạn có thể sử dụng chúng trong CoffeeScript, vanilla JavaScript và ES6. Điều tốt nhất là, các thành phần là OOP. Đây là một trong những ví dụ của họ:

class ExampleComponent extends BlazeComponent {
  onCreated() {
    this.counter = new ReactiveVar(0);
  }

  events() {
    return [{
      'click .increment': this.onClick
    }];
  }

  onClick(event) {
    this.counter.set(this.counter.get() + 1);
  }

  customHelper() {
    if (this.counter.get() > 10) {
      return "Too many times";
    }
    else if (this.counter.get() === 10) {
      return "Just enough";
    }
    else {
      return "Click more";
    }
  }
}

ExampleComponent.register('ExampleComponent');

{{> ExampleComponent }}

3) Tôi thích các loại và bộ chuyển mã cho tôi biết nơi nào và khi nào sẽ xảy ra lỗi. Tôi đang sử dụng TypeScript để làm việc với Meteor và tìm thấy kho lưu trữ sau: https://github.com/dataflows/meteor-typescript-utils Có vẻ như người tạo đã cố gắng thực hiện một cách tiếp cận MVC.

class MainTemplateContext extends MainTemplateData {
    @MeteorTemplate.event("click #heybutton")
    buttonClick(event: Meteor.Event, template: Blaze.Template): void {
        // ...
    }

    @MeteorTemplate.helper
    clicksCount(): number {
        // ...
    }
}

class MainTemplate extends MeteorTemplate.Base<MainTemplateData> {
    constructor() {
        super("MainTemplate", new MainTemplateContext());
    }

    rendered(): void {
        // ...
    }
}

MeteorTemplate.register(new MainTemplate());

<template name="MainTemplate">
    <p>
        <input type="text" placeholder="Say your name..." id="name">
        <input type="button" value="Hey!" id="heybutton">
    </p>
    <p>
        Clicks count: {{ clicksCount }}
    </p>

    <p>
        <ul>
            {{#each clicks }}
                <li> {{ name }} at <a href="{{pathFor 'SingleClick' clickId=_id}}">{{ time }}</a></li>
            {{/each}}
        </ul>
    </p>
</template>

Thật không may, dự án này không được duy trì hoặc phát triển tích cực.

4) và tôi nghĩ rằng đã được đề cập, bạn có thể mở rộng quy mô bằng cách sử dụng các gói. Điều đó đòi hỏi một cách suy nghĩ trừu tượng tốt. Nó dường như hoạt động cho Kính thiên văn: https://github.com/TelecopeJS/Telecope

5) mở rộng thiên thạch-mẫu - cung cấp nhiều cách khác nhau để sao chép trình trợ giúp mẫu, trình xử lý sự kiện và móc nối giữa các mẫu, cho phép tái sử dụng mã; một nhược điểm là tất cả việc sao chép phải được nhà phát triển quan tâm, thường xuyên hết lần này đến lần khác, điều này trở nên có vấn đề khi codebase phát triển; hơn nữa, nếu không có cộng đồng API được xác định rõ ràng thì không thể xây dựng và chia sẻ các thành phần

6) Các thành phần dòng chảy - Các thành phần dòng chảy gần với React hơn trong thiết kế API trong khi Blaze Các thành phần đang giữ các khái niệm quen thuộc như bối cảnh dữ liệu và trình trợ giúp mẫu; Mặt khác, các Thành phần Dòng chảy vẫn sử dụng các trình xử lý sự kiện dựa trên mẫu trong khi Các thành phần Blaze tạo cho chúng các phương thức lớp để dễ dàng mở rộng hoặc ghi đè chúng thông qua kế thừa; nói chung, các thành phần Blaze dường như được định hướng OOP nhiều hơn; Các thành phần dòng chảy chưa được phát hành chính thức ( tín dụng văn bản cho # 5 và # 6 https://github.com/peerl Library / moror-blaze-components #javascript-and- es6-support )

Số 2 và 3 cũng cần một số sử dụng, nhưng bạn sẽ đạt được tốc độ phát triển theo thời gian. Số bốn cho phép bạn xây dựng và kiểm tra các thành phần để làm cho mã của bạn ổn định hơn. Số ba đi kèm với lợi thế về sự an toàn của Typecript, đây là một điểm cộng rất lớn khi bạn phát triển trong một nhóm có tài liệu kém. Tuy nhiên, tôi hiện đang chuyển số hai sang TypeScript vì tôi cảm thấy rất thoải mái khi làm việc với nó và tôi không phải gấp đôi gói trình biên dịch để làm cho nó hoạt động với Meteor khi tôi không sử dụng Gulp.

Vẫn còn khó để tìm đúng cách để làm việc với Meteor. Bạn cần phải tự mình tìm ra nó, nếu không, bạn sẽ có một cấu trúc thư mục được sắp xếp độc đáo, nhưng bạn không biết nơi nào có mọi thứ. Chúc mừng mã hóa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.