主干网.js - 视图未重新加载

Backbone.js - View not reloading

本文关键字:加载 新加载 js 视图 主干网      更新时间:2023-09-26

所以我设法弄清楚如何从外部文件填充我的集合,并根据 url 呈现视图,但我遇到了一个问题。下面的代码按预期工作,除了在页面加载时,我收到以下错误:

Uncaught TypeError: Cannot call method 'get' of undefined 

摆脱"view.render()"消除了错误,但现在应用程序不再响应URL中的ID更改(例如,从#/donuts/1到#/donuts/2不会更新视图)

有人可以在这里指出我正确的方向吗?

守则:

(function(){
var Donut = Backbone.Model.extend({
    defaults: {
        name: null,
        sprinkles: null,
        cream_filled: null
    }
});
var Donuts = Backbone.Collection.extend({
    url: 'json.json',
    model: Donut,
    initialize: function() {
        this.fetch();
    }
})
var donuts = new Donuts();
var donutView = Backbone.View.extend({
     initialize: function() {
        this.collection.bind("reset", this.render, this)
    }, 
    render: function() {
        console.log(this.collection.models[this.id].get('name'))
    }
});
var App = Backbone.Router.extend({
    routes: {
        "donut/:id" : 'donutName',
    },
    donutName: function(id) {
        var view = new donutView({
            collection: donuts,
            id: id
        });
        view.render();
    }
});
var app = new App();
Backbone.history.start();
})(jQuery);

JSON:

[
    {
        "name": "Boston Cream",
        "sprinkles" : "false",
        "cream_filled": "true"
    },
    {
        "name": "Plain",
        "sprinkles": "false",
        "cream_filled": "false"
    },
    {
        "name": "Sprinkles",
        "sprinkles": "true",
        "cream_filled": "false"
    }
]

这里看起来有点流量问题。你具有侦听集合的"重置"事件的视图。因此,当重置时,视图将呈现。那很好。但我相信问题出在您的路由器上。路由时,将创建视图的新实例,但不对集合执行任何操作,因此其状态相同。

由于您已经在观察集合,因此不要对视图执行任何操作。路由时,请更新集合的网址,然后执行抓取操作。这将触发重置,然后视图应自行更新。