【问题标题】:why does backbone think I'm treating an object like a function?为什么骨干认为我将对象视为函数?
【发布时间】:2013-08-09 21:38:00
【问题描述】:

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

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

【问题讨论】:

  • 究竟是哪一行导致了错误?
  • 其实就是var post = new app.models.post({id: id});这一行。我把它改成了var post = new app.Models.Post,它告诉我Uncaught TypeError: Object [object Object] has no method 'fetch'

标签: backbone.js


【解决方案1】:

你正在这样做:

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

或类似的东西。

【讨论】:

    【解决方案2】:

    问题是您已将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被添加到路由器对象中并且通常在整个生命周期内都存在申请。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2012-04-12
      • 2011-06-17
      • 1970-01-01
      • 2011-01-25
      • 2019-09-16
      相关资源
      最近更新 更多