【问题标题】:Uncaught ReferenceError: JST is not defined on Rails Backbone未捕获的 ReferenceError:JST 未在 Rails Backbone 上定义
【发布时间】:2015-12-12 20:39:45
【问题描述】:

每当我在我的 Backbone 视图中添加 template: JST["users/show"] 时,我都会收到以下两个错误: Uncaught ReferenceError: JST is not defined Uncaught TypeError: Twitter.Views.UserShow is not a function

我查看了有关 JST 的所有问题都没有在 stackoverflow 上定义,但我无法找出问题所在。我也跑了rails g backbone:install

这是我的文件

应用程序.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require underscore
//= require backbone
//= require twitter
//= require_tree ../templates
//= require_tree ./models
//= require_tree ./collections
//= require_tree ./views
//= require_tree ./routers
//= require_tree .

路由器.js

Twitter.Routers.Router = Backbone.Router.extend({

  initialize: function (options) {
    this.$rootEl = options.$rootEl;
    this.users = new Twitter.Collections.Users ();
  },

  routes: {
    'users/:id': 'userShow'
  },

  userShow: function(id) {
    var user = this.users.getOrFetch(id);
    var showView = new Twitter.Views.UserShow ({
      model: user
    });

    this.$rootEl.html(showView.render().$el);
  }

});

user.js

Twitter.Collections.Users = Backbone.Collection.extend ({

  url: '/api/users',
  model: Twitter.Models.User,

  getOrFetch: function (id) {
    var user = this.get(id);
    var users = this;
    if (user) {
      user.fetch();
    } else {
      user = new Twitter.Models.User ( {id: id });
      user.fetch({
        success: function () {
          users.add(user)
        }
      });
    }

    return user;
  }

});

user.js

Twitter.Models.User = Backbone.Model.extend ({

  urlRoot: '/api/users'

});

show.js

Twitter.Views.UserShow = Backbone.View.extend ({

  template: JST["users/show"],

  initialize: function () {
    this.listenTo(this.model, 'sync', this.render);
  },

  render: function () {
    // console.log(this.model.get("username"))
    var content = this.template({ user: this.model });
    this.$el.html(content);

    return this;
  }

});

show.jst.ejs(在模板/用户中)

<%= user.escape("username") %>

console.log(this.model.get("username") 返回正确的用户名。

【问题讨论】:

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


    【解决方案1】:

    问题出在 Sprockets gem 上。

    将 Sprockets 和 Sprockets-Rails gem 保留在特定版本上,此错误应该会得到解决。

    对我来说,以下版本解决了这个问题:

    gem 'sprockets', '3.3.4'
    gem 'sprockets-rails', '2.3.3', require: 'sprockets/railtie'
    

    【讨论】:

      【解决方案2】:

      我必须在里面添加config.assets.paths << "app/assets/templates"

      module TwitterClone
        class Application < Rails::Application
      
          config.active_record.raise_in_transactional_callbacks = true
          config.assets.paths << "app/assets/templates"
        end
      end
      

      【讨论】:

        猜你喜欢
        • 2016-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-27
        • 1970-01-01
        • 2013-09-30
        • 2016-06-24
        相关资源
        最近更新 更多