1

使用するたびに、最初にすべてのモジュールを定義する必要があることに気付きました。私の場合、今は実際にそれを行う必要はありません。バックボーンのテンプレートをロードするだけです。

モジュール定義なしでテンプレートをロードすることは可能ですか?

これは次のようになります。

View = Backbone.View.extend({
    tagName: 'div',
    className: 'entry',
    initialize: function(model, response){
        console.log("View Intialized: "+this.model.get('id') )

        _.bindAll(this, "render") 
        this.model.bind('change', this.render)
        this.template = _.template( require( ['text!templates/users/view.html'] ) ) //would look something like this?
    },
    render: function(){
        var rendered = this.template( this.model.toJSON() ) 
        $(this.el).html( rendered ); 
        return this 
    }
})

ほとんどの場合、ファイルに複数のビューがあり、モジュール定義がそれでどのように機能するかわかりません。しかし、私は上記のような同様の単純な解決策になります。

編集:答えに加えて、より軽い解決策はここにありますhttp://coenraets.org/blog/2012/01/backbone-js-lessons-learned-and-improved-sample-app/ここで最初にすべてのテンプレートをロードしますこれは、必要に応じてロードするよりも優れている場合があります。

4

1 に答える 1

2

さて、最初にこの質問をしてくれてありがとう:私はそれに対して(悪い)答えを書きました、そして私が私がしたようにRequireを理解していなかったことに気づきました、そしてそれは私にもう少し自分自身を教育することを余儀なくさせました:-)うまくいけば今私はより良い答えを提供することができます。

requireを使用する方法は2つあります。

1)同期:var baz = require('foo/bar')

2)非同期:require(['foo/bar'], function(bar) {var baz = bar;}

問題は、この2つを次の行と組み合わせていることです。

this.template = _.template( require( ['text!templates/users/view.html'] )

async-styleを実行しているかのように、配列としてrequireする依存関係を指定していますが、モジュールsync-styleをすぐに返すことを期待しています。

解決策は次のいずれかです。

A)テンプレートをプリロードし(define呼び出しまたはasync require呼び出しのいずれかで)、同期スタイルの構文を使用します。

this.template = _.template( require('text!templates/users/view.html')
// NOTE: If you don't pre-load this won't work

また:

B)非同期スタイルを使用します。

require(['text!templates/users/view.html'], function(viewTemplate) {
    View = Backbone.View.extend({
    // rest of your code
    this.template = _.template(viewTemplate);
})
于 2012-12-27T01:59:49.033 に答える