0

バックボーン.js、backbone.marionetteで構築されたサイトの一部で非常に奇妙なエラーが発生しています。テンプレートにはunderscore.jsを使用し、RESTフレームワークにはtastypieを使用しています。

Firebugは、「ReferenceError:xyz(アンダースコアテンプレートの<%= xyz%>が定義されていません)」を出力します。(範囲5から8)。

これをunderscore-min.jsファイルまでさかのぼると、minファイルであるため、8行ありません。それは予想されることです。

ただし、コンソールでの変数の手動操作は正常に機能するため、代わりに構文エラーが疑われます。

RESTフレームワークから名前モデルフェッチを手動で定義し、それをビューにレンダリングできます。MyApp.testSection.show( "レンダリングされたビュー")を使用して、問題なくフロントエンドに適切に出力することもできます。

NameViewテンプレート内の構文に何か問題があるのではないかと疑っています:_。template(...)セクションまたはMyApp.addInitializer

以下のコード

Name = TastypieModel.extend({

    urlRoot:'/api/v1/names/Calvin'

});

//returns an array {'name':'Calvin', 'age':32, etc....}

NameView = Backbone.Marionette.ItemView.extend({
    model: Name,
    template: _.template("<h1>My name is <%= name %></h1>"),
    tagName: 'p',

    initialize: function(){
        this.bindTo(this.model, "change", this.render);
    }
});

MyApp.addInitializer(function(options){

    var name = new Name();

    name.fetch();

    var nameview = new NameView ({
        model: name
    });


    MyApp.testSection.show(nameview);

});
4

1 に答える 1

2

この問題は、データのフェッチが原因である可能性があります。

model.fetch()は非同期操作ですが、コードはこれを考慮していません。fetchモデルがフェッチされるのを待つのではなく、呼び出しの直後にレンダリングが行われるため、データのないモデルでビューをレンダリングしています。


MyApp.addInitializer(function(options){

    var name = new Name();

    var fetched = name.fetch();

    // wait for the model to be fetched
    $.when(fetched).then(function(){

      var nameview = new NameView ({
        model: name
      });

      MyApp.testSection.show(nameview);

    });

});
于 2012-11-16T15:26:36.467 に答える