0

私は最近、バックボーン js ファイルを最新バージョンに更新しましたが、何かが壊れていることを知っていますか? とてもイライラします。ビュー内でコレクションをインスタンス化し、コレクションをループしようとしていますが、コレクションの最後のアイテムのみを出力しているため、ここに私のコードがある理由を理解できません

 NavView = Backbone.View.extend({  
el : $('ul'), 
initialize: function(){

 _.bindAll(this, 'render');
  this.navCollection = new NavigationCollection([ {name: "home", href: '/home'},{name: "about", href:'/about'},{name: "contact", href: '/contact'}]); 
  this.render();

},

以下のコードからコレクションをレンダリングする多くの方法を試しました

 render : function() {
  this.navCollection.each(function (item) {
        $(this.el).append("<li><a href=" + item.get("href") + ">" + item.get("name") + "</a></li>");
    }, this);
    return this; // remember this for chaining
  //also tried this method as well

 _.each(this.navCollection.models, function(item){
        //$(this.el).append("<li><a href=" + item.get("href") + ">" + item.get("name") + "</a></li>");
        $("<li><a href=" + item.get("href") + ">" + item.get("name") + "</a></li>").appendTo(this.el);
    },this)
    return this; // remember this for chaining
 },

いずれにせよ、3 つのアイテムではなく、最後のアイテムの連絡先のみを出力しています。こちらを参照してくださいhttp://dalydd.com/projects/backbone/backbone.html

var NavigationItem = Backbone.Model.extend({
    defaults: {
        name: '',
        href: '',
        last: false,
        id: ''
    },
    initialize: function() {

    }
});

var NavigationCollection = Backbone.Collection.extend({
    model: NavigationItem,
});

以前はすべてを出力していましたが、バックボーンを新しいバージョンに更新すると、1 しか出力されません。

ありがとう

4

1 に答える 1

2

NavigationItem 定義で、id のデフォルト値を空の文字列に設定します。

var NavigationItem = Backbone.Model.extend({
    defaults: {
        name: '',
        href: '',
        last: false,
        id: ''
    }
});

Backbone 0.9.9 では、モデルは逆の順序で追加され、重複したモデルは拒否され、空の文字列が有効な ID として受け入れられ、コレクション内の最後のモデルが残ります。問題を解決するには、id のデフォルト値を削除してください

var NavigationItem = Backbone.Model.extend({
    defaults: {
        name: '',
        href: '',
        last: false
    }
});
于 2012-12-27T16:56:48.283 に答える