1

モデル

Network.Models.FeedItem = Backbone.Model.extend({
  isPost: function() {
    return this.get('template') === 'post';
  }
})

Network.Models.Post = Backbone.Model.extend({
  urlRoot: '/p',

  hasImageInDetails: function() {
    if(this.get('details').match(/<img[^<]*>[\w\d]*<\/img>|<img[^\/]*\/>/i)) {
      return true
    }
  }
)}

テンプレート feed_items/post.jst.eco

  <% if @model.hasImageInDetails(): %>
    has image
  <% end %>

ビュー

Network.Views.FeedItemView = Backbone.View.extend({
  initialize: function() {
    var self = this;
    this.template = JST[this.path()];
  },

  render: function() {
    var self = this;
    $(this.el).html(this.template({ model: this.model }));

    if (this.model.isPost()) {
      this.questionView = new Network.Views.FeedItems.Post({
        model: this.model,
        el: this.$el,
        parent: this
      });
    }
  }
});

Network.Views.FeedItems.Post = Backbone.View.extend({
  initialize: function() {
    this.render();
  },

  render: function() {
    var self = this;
  }
});

しかし、私はエラーが発生します:

Uncaught TypeError: Object [object Object] has no method 'hasImageInDetails' 
4

1 に答える 1

0

で定義されているメソッドを呼び出すため、コードからFeedItemView、タイプ のモデルを が処理することを期待しているように見えます。Eco が見つけられないメソッドはモデルで定義されているため、論理的には、これらの 1 つが失敗します。FeedItemmodel.isPost()FeedItemPost

Postから拡張するつもりでしたFeedItemか? その場合、代わりに:

Network.Models.Post = Backbone.Model.extend({ ... });

モデルを次のように宣言する必要があります。

Network.Models.Post = Network.Models.FeedItem.extend({ ... });
于 2013-01-08T17:17:26.007 に答える