6

テンプレートファイルからビューをロードするためだけにバックボーンを使用している非常に単純な Web ページがあります。

<div id="content"></div>

<script src="js/vendor/json2.js"></script>
    <script src="js/vendor/jquery-2.0.2.min.js"></script>
    <script src="js/vendor/underscore-min.js"></script>
    <script src="js/vendor/backbone-min.js"></script>
    <script src="js/flight-match-form.js"></script>
    <script type="text/template" id="template-flight-match">
      <section id="form-search" class="content-inner clearfix">
        <div id="date-container" class="search-row clearfix">
          <label class="search-label" for="date">Travel Date</label>
          <img src="images/structure/icon-calendar.png" alt="calendar" class="calendar">
          <span class="help-text" id="date-unknown">don't know it?</span>
        </div>
        <div id="flight-container" class="search-row clearfix">
          <label class="search-label" for="date">FLIGHT #</label>
          <input type="text" class="search-input" id="input-flight" pattern="[a-zA-Z0-9]+">
          <span class="help-text" id="date-unknown">don't know it?</span>
        </div>
        <button id="button-match">
          Match
          <img src="images/structure/icon-arrow.png" height="15" width="20" alt="Submit Arrow">
        </button>
      </section>
    </script>

そして、flight-match-form.js では、単純に次のように言います。

$(document).ready(function(){

    var MatchView = Backbone.View.extend({
        initialize: function(){
            this.render();
        },
        render: function(){
            // Compile the template using underscore
            var template = _.template( $("#template-flight-match").html(), {} );
            // Load the compiled HTML into the Backbone "el"
            this.$el.html( template );
        }
    });

    var matchView = new MatchView({ el: $("#content") });

});

これはうまく機能し、次に私が実際にやりたかったことは、すべての html をスクリプト タグから取り出して、適切な HTML ファイルに入れることだけでした。それで、これを行う最も簡単な方法を知っている人はいますか?

私はこのチュートリアルに従おうとしましたが、require.js とテキスト モジュール、ルーター、2 つの新しい js ファイル (メインとアプリ)、ビューとテンプレート。現在、バックボーンが未定義のプロパティ「ビュー」を読み取ることができないというエラーがビューに表示されています。これは私のコードです:

index.html に require.js をインクルードし、main.js を初期ファイルとして参照するようにします。

次に、main.js でテンプレート ディレクトリを指定し、それを app.js に送信します。

require.config({
  paths: {
    jquery: 'vendor/jquery/jquery-2.0.2.min',
    underscore: 'vendor/underscore/underscore-min',
    backbone: 'vendor/backbone/backbone-min',
    templates: '../templates'
  }
});

require([
  'app',
], function(App){
  App.initialize();
});

app.js で、ルーターを初期化します。

define([
  'jquery',
  'underscore',
  'backbone',
  'router', // Request router.js
], function($, _, Backbone, Router){
  var initialize = function(){
    // Pass in our Router module and call it's initialize function
    Router.initialize();
  };

  return {
    initialize: initialize
  };
});

そして router.js で、ビューのルートを設定します。

// Filename: router.js
define([
  'jquery',
  'underscore',
  'backbone',
  'views/search/SearchFormView'
], function($, _, Backbone, SearchFormView) {

  var AppRouter = Backbone.Router.extend({
    routes: {
      // Define some URL routes
      'search': 'SearchFormView'
    }
  });

  var initialize = function(){

    var app_router = new AppRouter;

    app_router.on('route:SearchFormView', function(){

        // Call render on the module we loaded in via the dependency array
        var searchView = new SearchFormView();
        searchView.render();

    });
    Backbone.history.start();
  };
  return {
    initialize: initialize
  };
});

最後に、テンプレートをロードするビューを作成します。

define([
  'jquery',
  'underscore',
  'backbone',
  'text!templates/search/search-form-template.html'

], function($, _, Backbone, searchFormTemplate){
  var SearchFormView = Backbone.View.extend({
    initialize: function(){
        this.render();
    },
    render: function(){
        // Compile the template using underscore
        var template = _.template( $("#template-flight-match").html(), {} );
        // Load the compiled HTML into the Backbone "el"
        this.$el.html( template );
    }
  });
  return SearchFormView;
});

しかし、うまくいかず、その理由がわかりません。どんな助けでも大歓迎です。コードの量が多すぎることをお詫びしますが、このようなものを適切な方法でロードするだけですべてが必要なようです。

4

3 に答える 3

3

現時点では、実際に構成に問題があります。Backbone は AMD モジュールではないため、 のshimオプションを使用する必要がありますrequirejs。まあ、それはバックボーンに関するものであるため、例はそれ自体を物語っています。

于 2013-06-12T16:52:48.157 に答える
1

この場合、必要なテンプレートを使用する必要があります。jquery で取得しようとする代わりに、searchFormTemplate です。

テキスト プラグインは適切な HTML を提供し、それを変数 searchFormTemplate に含めて使用できるようにします。

SearchFormeView の render 関数でこれを変更します

render: function(){
    // Compile the template using underscore
    var template = _.template(searchFormTemplate, {} ); // 
    // Load the compiled HTML into the Backbone "el"
    this.$el.html( template );
}
于 2013-06-12T15:26:21.713 に答える
0

https://github.com/requirejs/textで入手できるテキスト プラグインをインストールします。

次に、ここでプラグインを定義します。

require.config({
  paths: {
    text: '{{directory where you put text.js}}',
  }
});

私たちはこのトピックにいるので、requirejs-tpl-plugin はより良いオプションですhttps://github.com/jfparadis/requirejs-tpl

于 2013-06-12T15:25:53.510 に答える