programing

Meteor로 다중 페이지 응용 프로그램을 어떻게 생성합니까?

nasanasas 2021. 1. 7. 08:03
반응형

Meteor로 다중 페이지 응용 프로그램을 어떻게 생성합니까?


저는 Javascript를 처음 접했고 호기심으로 Meteor를 다루기 시작했습니다. 정말 놀라운 점은 모든 HTML 콘텐츠가 하나의 페이지로 결합되는 것 같습니다.

특수 페이지로 연결되는 URL 처리를 도입하는 방법이 있다고 생각합니다. "todo"예제는 일종의 Router클래스 를 통해이를 수행 할 수있는 것 같습니다 . 이것이 URL 처리의 "표준"방식입니까?

URL을 처리 할 수 ​​있다고 가정 할 때 별도의 페이지를 표시하도록 HTML 코드를 어떻게 구성합니까? 제 경우에는 각각 완전히 별개의 데이터 세트를 가질 수 있으므로 HTML 코드를 전혀 공유 할 필요가 없습니다.


Jon Gold의 대답은 정확했지만 Meteor 0.5.4 현재 :

작업은 이제 Iron Router로 이동했습니다. 새 프로젝트에서 라우터 대신 IR을 사용하는 것을 고려하십시오!

따라서이를 수행하는 현재 "표준"방법은 IronRouter 를 사용하는 입니다.


내가 아는 한, 현재이를 수행하는 즉시 사용할 수있는 방법은 없습니다.

내가 제안하는 것은 Backbone.js 스마트 패키지를 사용하는 것입니다. Backbone.js는 푸시 상태 라우터와 함께 제공되며 사용자의 브라우저가이를 지원하지 않는 경우 해시 URL로 대체됩니다.

유성 앱 디렉토리에 this meteor add backbone.

그런 다음 클라이언트 측 코드 어딘가에 다음과 같이 Backbone.js 라우터를 만듭니다.

var Router = Backbone.Router.extend({
  routes: {
    "":                 "main", //this will be http://your_domain/
    "help":             "help"  // http://your_domain/help
  },

  main: function() {
    // Your homepage code
    // for example: Session.set('currentPage', 'homePage');
  },

  help: function() {
    // Help page
  }
});
var app = new Router;
Meteor.startup(function () {
  Backbone.history.start({pushState: true});
});

그런 다음 Handlebars 템플릿의 어딘가에 Session의 "currentPage"에 설정된 값을 기반으로 페이지를 렌더링하는 도우미를 만들 수 있습니다.

backbone.js 라우터에 대한 자세한 정보는 http://backbonejs.org/#Router 에서 찾을 수 있습니다.

Metoer에서 Handlebars 도우미 메서드를 만드는 방법에 대한 관련 정보도 http://docs.meteor.com/#templates 에서 확인할 수 있습니다.

도움이 되었기를 바랍니다.


Meteor-Router 는 이것을 정말 쉽게 만듭니다. Telescope를 좋은 참고 자료로 사용하여 구축 한 일부 앱에서 사용하고 있습니다. Telescope의 router.js 살펴보기

그것을 사용하려면…

mrt add router

client / router.js에서 :

Meteor.Router.add({
  '/news': 'news', // renders template 'news'

  '/about': function() {
    if (Session.get('aboutUs')) {
      return 'aboutUs'; //renders template 'aboutUs'
    } else {
      return 'aboutThem'; //renders template 'aboutThem'
    }
  },

  '*': 'not_found'
});

템플릿에서…

<body>{{renderPage}}</body>

나는 같은 문제를 발견했다. 코드가 커지면 코드를 깨끗하게 유지하기가 어렵습니다.

이 문제에 대한 나의 접근 방식은 다음과 같습니다.

I separate the different html pages as I would do with another web framework. There is an index.html where I store the root html page. And then for each big functional part I create a different template and place it in one different html. Meteor then merges them all. Finally I create a session variable called operation where I define what to show at each time.

Here goes a simple example

index.html

<head>
  <title>My app name</title>
</head>

<body>
 {{> splash}}
 {{> user}}
 {{> debates}}
</body>

then in splash.html

<template name="splash">
    {{#if showSplash}}
      ... your splash html code goes here...
    {{/if}}
</template>

then in user.html

<template name="user">
    {{#if showUser}}
      ... your user html code goes here...
    {{/if}}
</template>

and so on ...

In the javascript code then I check when to print each template using the Session variable, like this:

Template.splash.showSplash = function(){
    return Session.get("operation") == 'showSplash';
}

Finally the Backbone Router manages this Session variable

var DebateRouter = Backbone.Router.extend({

  routes: {
    "": "showSplash",
    "user/:userId": "showUser",
    "showDebates": "showDebates",
    // ...
  },
  splash: function () {
   Session.set('operation', 'showSplash');
   this.navigate('/');
  },
  user: function (userId) {
   Session.set('operation', 'showUser');
   this.navigate('user/'+userId);
  },
  // etc...
});

I hope this pattern is helpful for other Meteor developers.


This is my hacky solution to routing : https://gist.github.com/3221138

Just put the page name as the template name en navigate to /{name}

ReferenceURL : https://stackoverflow.com/questions/11740368/how-do-i-create-multi-page-applications-with-meteor

반응형