javascript - 如何使用 Backbone 生态模板中的自定义模型功能?

标签 javascript jquery ruby-on-rails backbone.js

模型

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' 

最佳答案

从您的代码看来,您希望 FeedItemView 处理 FeedItem 类型的模型,因为您调用了方法 model.isPost(),它是在 FeedItem 上定义的。 Eco 找不到的方法是在 Post 模型上定义的,因此从逻辑上讲,其中一个方法将会失败。

您的意思是从 FeedItem 扩展 Post 吗?在这种情况下,而不是:

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

您应该这样声明模型:

Network.Models.Post = Network.Models.FeedItem.extend({ ... });

关于javascript - 如何使用 Backbone 生态模板中的自定义模型功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219022/

相关文章:

javascript - 删除按钮并在单击时分配

Javascript const 关键字的使用方式不同

javascript - 在 jQuery 中访问 Rails.env 变量?

javascript - 当按钮 append 到标题时图标不会改变

php - Firefox 浏览器的 Twitter Bootstrap 中不显示下拉箭头

javascript - 如何在 JQuery AJAX 文件上传中添加唯一标识符?

javascript - SVG 垂直展开线

ruby-on-rails - 使用 Ruby on Rails 有条件地在 Slim 中创建隐藏属性

ruby-on-rails - 如何解决 Rails 中的 JSON 语法错误?

Javascript 函数“娱乐”?