将Backbone添加到Rails应用程序中,我在应用程序命名空间内创建了一个帖子模型,如此
var app = {
this.models.post = new app.Models.Post();
在路由器中,我创建了以下路由
"posts/:id": "postDetails"
当我导航到/ posts / 4时,当我尝试在模型上调用fetch时出现Uncaught TypeError: object is not a function
错误
postDetails: function (id) {
console.log(id);
var post = new app.models.post({id: id});
this.post.fetch({
success: function (data) {
$('#content').html(new PostView({model: data}).render().el);
}
});
}
根据Backbone文档http://backbonejs.org/#Model-fetch,我应该能够在模型上调用fetch来从服务器检索数据。为什么Backbone认为我将对象视为函数?
答案 0 :(得分:0)
问题是您已将post
声明为本地变量var post
,但之后尝试以成员this.post
的形式访问它。你需要这个:
this.post = new app.models.post({id: id});
this.post.fetch({ ...
或者这个:
var post = new app.models.post({id: id});
post.fetch({ ...
(区别在于局部变量var post
在瞬态范围内声明并在postDetails
完成后被抛弃;而实例变量this.post
被添加到Router对象中并且通常会存在在申请的整个生命周期中。)
答案 1 :(得分:0)
你这样做:
this.models.post = new app.Models.Post();
可能会将app.models.post
设置为app.Models.Post
模型的实例。然后你尝试这样做:
var post = new app.models.post({id: id});
但是你只能在函数上使用new
operator:
new constructor[([arguments])]
<强>参数强>
constructor
一个指定对象实例类型的函数。
你可能想说:
var post = new app.Models.Post({ id: id });
或类似的东西。