1

一連の画像を反復処理する、可能な限り単純なバックボーン アプリをセットアップしようとしています。

次の URL が下のアプリに影響するようにしたいので、//??? を入れました。問題があるコメントで:

URL:

http://localhost:3000/arc/location2/8   -> route to startapp
http://localhost:3000/arc/location2/8#image/1 -> route to image with collection.at(1)
http://localhost:3000/arc/location2/8#image/2 -> route to image with collection.at(2)

コード:

var imgsArray=[{'url':'/tmp-images/surf.jpg'},
    {'img':'/tmp-images/jamaica.jpg'},
    {'url':'/tmp-images/jamaica-2.jpg'}
];

arc.Image=Backbone.Model.extend({});
arc.Images=Backbone.Collection.extend({model:arc.Image});

var imgs=new arc.Images(imgsArray);
console.log(imgs.length);

var img=new arc.Image(imgsArray[0]);

コードとルーターを表示:

arc.ItemView = Backbone.View.extend({
    el: $('#mig-container'),
    initialize:function(){
      this.model=this.collection.at(0);
      this.render(this.model);
    },
    render:function(){
       var html=this.model.get('url');
       this.$el.html(html);
       return this;
   }
});
var imgView=new arc.ItemView({collection:imgs});
var HexApp = Backbone.Router.extend({
    routes: {
        "": "startapp",
        "image/:index_id": "image"
    },
    startapp:function(){
        console.log("within startapp");
        imgView.render();
    },
    image:function(index_id){
        console.log("within image: " + index_id);
        // get Uncaught TypeError: Cannot call method 'at' of undefined in Chrome
        imgView.model=this.collection.at(index_id);  //??? no idea how to manipulate this
    }
});

hex={};

var app_router = new HexApp();
Backbone.history.start();

index_id で指定されたインデックスにコレクションを設定するにはどうすればよいですか? または、これを指定するより慣用的な方法はありますか?

thx事前に

4

2 に答える 2

2

ルーターが解決できませんthis.collectioncollectionこれは、定義していないルーターのインスタンス内のプロパティを参照しています。代わりに、以下を使用する必要があります。

imgView.model = imgs.at(index_id);

imgsは、定義したコレクションのインスタンスを格納するために以前に使用した変数です。

于 2013-09-11T05:13:15.603 に答える