0

私はテンプレートを持っています:

<script type="text/template" id="action-template-item">
    <span data-layer="<%= target%>" data-uuid="<%= uuid%>">delete</span>
</script>

テンプレートをビューでレンダリングします

    window.ActionView = Backbone.View.extend({
          template: $("#action-template-item").html(),
          initialize: function () {
                this.render();
          },
          render: function () {
              var tmpl = _.template(this.template);
              console.log(this.model);//model have "target"
              this.$el.html(tmpl(this.model));
              return this;
          }

    });

テンプレートには、モデルデータからの2つのプロパティしかありません。

レンダリングする前に、コンソールを使用してモデルにtarget値があるかどうかを確認します。上記のコメントのように、答えは肯定的です。

私のモデルデータは次のようなものです。

{
   target: "xxx-xxx-xxx",
   uuid: "xxx-xxx-xx"
}

しかし、火の虫は私に教えてくれます"target is not defined"

何が起こったのですか?私のコードの何が問題になっていますか?

4

1 に答える 1

1

モデルはおそらく次のようになります。

var M = Backbone.Model.extend({});
var m = new M({
   target: "xxx-xxx-xxx",
   uuid: "xxx-xxx-xx"
});

デモ (コンソールを開くとエラーが表示されます): http://jsfiddle.net/ambiguous/Rnd6k/

だからあなたが言うとき

//model have "target"

あなたはおそらくそれが存在することを意味しthis.model.attributes.targetます。バックボーン モデルの属性と JavaScript オブジェクトのプロパティは同じものではありません。アンダースコア テンプレートはオブジェクトのプロパティを探しますが、バックボーン モデルの属性については何も知りません。

通常のアプローチはtoJSON、ビューをレンダリングするときに使用してモデルをシリアル化することです。

render: function () {
    var tmpl = _.template(this.template);
    this.$el.html(tmpl(this.model.toJSON()));
    return this;
}

デモ: http://jsfiddle.net/ambiguous/Rnd6k/

于 2012-05-30T05:21:38.717 に答える