0

Rails アプリにバックボーンを追加して、このようにアプリの名前空間内にポスト モデルを作成しました

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

バックボーンのドキュメント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は Router オブジェクトに追加され、通常はアプリケーションの存続期間全体にわたって存続します。)

于 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 に答える