0

将 Backbone 添加到 Rails 应用程序,我在这样的应用程序命名空间内创建了一个 post 模型

var app = {

 this.models.post = new app.Models.Post();

在路由器中,我创建了以下路由

 "posts/:id": "postDetails"

当我导航到 /posts/4 时,Uncaught TypeError: object is not a function当我尝试像这样在模型上调用 fetch 时出现错误

 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 认为我将对象视为函数?

4

2 回答 2

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被添加到路由器对象中,并且通常会在应用程序的整个生命周期中存在。)

于 2013-08-09T22:08:41.170 回答
0

你这样做:

this.models.post = new app.Models.Post();

到,大概,设置为模型app.models.post的一个实例app.Models.Post。然后你尝试这样做:

var post = new app.models.post({id: id});

但是您只能在函数上使用new运算符

new constructor[([arguments])]

参数

constructor
指定对象实例类型的函数。

你可能想说:

var post = new app.Models.Post({ id: id });

或类似的东西。

于 2013-08-09T22:10:57.597 回答