为什么骨干认为我正在将一个对象视为一个函数?

时间:2013-08-09 21:38:00

标签: backbone.js

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

2 个答案:

答案 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 });

或类似的东西。