Чаплин и регионы

Мне нужна помощь в начале работы с node.js и Chaplin.

Вот сценарий:

  • Клиент приходит на мой сервер
  • Я отдаю клиенту статическую HTML-страницу. В этом html есть div с идентификатором "test"
  • Этот html также запускает приложение chaplin
  • в моем приложении chaplin я хочу иметь возможность прикрепить событие к "тестовому" div, например, щелкнув оповещения div "Да"

Как это работает?

Ибо то, что мне удалось узнать, пытаясь (поскольку я действительно не нашел хороших инструкций по этому чаплину ...), заключается в том, что мне нужно создавать области, в которые я затем помещаю свои взгляды. Эти представления могут иметь события только внутри этого региона. Чего я не понимаю, так это того, как мне использовать этот «тестовый» div в качестве региона?

сервер

app.js

var express = require('express');
var routes = require('./routes');
var http = require('http');
var path = require('path');

var app = express();

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Клиент

index.html

<!doctype html>
<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title></title>
  <meta name="viewport" content="width=device-width">
  <link rel="stylesheet" href="/stylesheets/app.css">
  <script src="/javascripts/vendor.js"></script>
  <script src="/javascripts/app.js"></script>
  <script>require('initialize');</script>
</head>
<body>

    <div id="test">
    </div>

</div>
</body>
</html>

маршруты.кофе

module.exports = (match) ->
  match '', 'home#index'

домашний контроллер.кофе

Controller = require 'controllers/base/controller'
HeaderView = require 'views/home/header-view'
HomePageView = require 'views/home/home-page-view'

module.exports = class HomeController extends Controller
  beforeAction: ->
    super
    @compose 'header', HeaderView, region: 'header'

  index: ->
    @view = new HomePageView region: 'main'

домашняя страница-view.coffee

View = require 'views/base/view'

module.exports = class HomePageView extends View
    autoRender: true
    className: 'home-page'
    template: require './templates/home'
    events:
        'click "testi"': 'testEvent'

    testEvent: (event) ->
        alert "Yeah"

Нажатие работает нормально в этом HomePageView, но как я могу связать это событие с «тестовым» div в моем html или как я могу использовать уже существующие div в качестве регионов?


person Garrry    schedule 15.10.2013    source источник
comment
Я с большим подозрением отношусь к любой библиотеке, основным преимуществом которой являются расплывчатые обещания шаблонов проектирования и лучших практик. Что побудило вас выбрать Chaplin, а не Backbone, jQuery и т. д.?   -  person Richard Marr    schedule 15.10.2013
comment
Вообще говоря, метод render вашего представления создаст некоторый HTML, а объект events привязывается к элементам в этом HTML. Я не думаю, что Chaplin позволяет вам привязывать события к элементам, которые находятся вне вашего представления.   -  person Sean McMillan    schedule 31.10.2013


Ответы (1)


Вы должны добавить опцию контейнера в свой основной вид макета, где значением является ваш элемент dom, например. #тест. Так что это может выглядеть примерно так.

View = require 'views/base/view'

module.exports = class HomePageView extends View
  container: '#test'
  autoRender: true
  className: 'home-page'
  template: require './templates/home'
  events:
    'click "testi"': 'testEvent'

  testEvent: (event) ->
    alert "Yeah"

Я бы также посоветовал вам взглянуть на этот проект — https://github.com/chaplinjs/chaplin-boilerplate. . Хороший шаблонный пример должен помочь с вашим пониманием.

person Jonathan Miles    schedule 05.11.2013