0

そのため、モデルをフェッチして、下のこのビューのテンプレートにレンダリングしようとすると、問題が発生します。調べてみると、やらなくてはいけないことがわかりました_.bindAllが、それでもうまくいきません。ユーザーの名前を取得しようとしている最初のconsole.log内では、undefinedが返されます。this.render()(フェッチの非同期性のために)成功コールバックに入れようとしましたが、機能しませんでした。何console.log(data)が得られるかを調べると、必要な値が表示されますが、テンプレートに何も渡されていないようです。

 define([
  'jquery',
  'underscore',
  'backbone',
  'models/UserModel',
  'text!/assets/templates/dashboard.html'
  ], function($, _, Backbone, UserModel, dashboardTemplate) {

    window.DashboardView = Backbone.View.extend({

    el: $(".content"),

    initialize: function() {
      _.bindAll(this, 'render');

      this.user = new UserModel();
      this.user.fetch({
        success: console.log(this.user.get("name")),
        error: function(model, response) {
          console.log("error fetching model");
          console.log(model);
          console.log(response);
        }
      });
    },

    render: function() {

      console.log(this);
      var data = {
        user: this.user,
        _: _
      };
      console.log(data);

      var compiledTemplate = _.template(dashboardTemplate, data);
      $(this.el).html(compiledTemplate);
    }
  });

  return DashboardView;

});

誰かが光を当ててくれませんか?

4

2 に答える 2

4

最初の問題は、console.log成功ではなく、すぐに実行することです。

this.user.fetch({
    success: console.log(this.user.get("name")),
    // ...

logこれは、呼び出してから、その戻り値をsuccessコールバックとして渡すことを意味します。匿名関数を渡す必要があります。

var view = this;
this.user.fetch({
    success: function(){
        console.log(view.user.get("name")),
        view.render();
    },
    // ...

次に、テンプレートをレンダリングするときに、モデルの属性を渡す必要がありますが、現在はモデル自体を渡しています。このためtoJSONに、モデルを標準オブジェクトに変換するために使用できます。

var data = {
    user: this.user.toJSON(),
    // ...
于 2012-12-27T14:37:11.413 に答える
1

this成功コールバック内の値を確認することViewをお勧めします。これが期待どおりであるとは思えないため、未定義になっています。console.logテンプレート内で、追加のデバッグを呼び出すことができます。

私があなたのコードで見る主な問題は、_.template()静的コンテンツではなく関数を返すことです。したがって、を呼び出す必要があります$(this.el).html(compiledTemplate());

compiledTemplate設定を渡すdataと、データが埋め込まれ、テンプレートが静的になります。通常は、テンプレートコードをに渡してから_.template、現在のデータを使用してそのようにコンパイルされた関数を呼び出す必要があります。compiledTemplate(this.user.toJSON());

于 2012-12-27T14:34:17.577 に答える