3

listView ページでアイテムを選択した後、正しい ID が渡されていることがわかりますが、何らかの理由で、私のコードは常に同じモデルを返します。

// main.js (relavent function)

    venueDetails: function (id) {
        // here, id is correct
        var venue = new Venue({_id: id});
        venue.fetch({success: function(){
            // here, the id of venue is changed for some reason
            console.log(venue.id);
            $("#content").html(new VenueView({model: venue}).el);
        }});
        this.headerView.selectMenuItem();
    },

モデル、

// model.js (relavent model)

    var base = 'http://localhost:3000';

    window.Venue = Backbone.Model.extend({
        urlRoot: base+"/venues",
        idAttribute: "_id",
    });

    window.VenueCollection = Backbone.Collection.extend({
        model: Venue,
        url: base+"/venues?populate=true"
    });

画像では、model.id が URL の内容と異なる場所を確認できます。 ここに画像の説明を入力

編集:ルーターマッピングを追加

var AppRouter = Backbone.Router.extend({

routes: {
    ""                     : "home",
    <!-- venues -->
    "venues"               : "venueList",
    "venues/page/:page"    : "venueList",
    "venues/add"           : "addVenue",
    "venues/:id"           : "venueDetails",
4

2 に答える 2

1

何らかのタイプのデフォルトを呼び出しているように見えるため_id、モデルで属性が正しくアクセスされているかどうかはわかりません。venue.fetch

多分試してください:

   window.Venue = Backbone.Model.extend({
        urlRoot: base+"/venues",
        idAttribute: this.options._id,
    });

(そして、オプション ハッシュから ID を取得します)

それでもうまくいかない場合は、idAttribute動的に宣言してみてください。

   window.Venue = Backbone.Model.extend({
        urlRoot: base+"/venues",
        idAttribute: function() { return this.options._id },
    });
于 2013-08-08T05:58:11.577 に答える