【发布时间】: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