Javascript Backbone.js-视图未重新加载
因此,我设法找出了如何从外部文件填充我的集合,并基于url呈现视图,但我遇到了一个问题。下面的代码按预期工作,除了页面加载,我收到以下错误:Javascript Backbone.js-视图未重新加载,javascript,backbone.js,backbone-views,backbone-routing,Javascript,Backbone.js,Backbone Views,Backbone Routing,因此,我设法找出了如何从外部文件填充我的集合,并基于url呈现视图,但我遇到了一个问题。下面的代码按预期工作,除了页面加载,我收到以下错误: Uncaught TypeError: Cannot call method 'get' of undefined 去掉“view.render()”可以消除错误,但现在应用程序不再响应url中的ID更改(例如,从#/donuts/1到#/donuts/2不会更新视图) 有人能给我指一下正确的方向吗 守则: (function(){ var Donut
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"
}
]
看起来这里有点流量问题。您的视图正在侦听集合的“重置”事件。因此,当重置时,视图将渲染。那很好。但我相信问题出在你的路由器上。路由时,您正在创建视图的新实例,但不对集合执行任何操作,因此其状态相同
因为您已经在观察集合,所以不要对视图执行任何操作。路由时,请更新集合的url,然后执行提取。这将触发重置,然后视图将自动更新。Jackpot!这正是我想要的。非常感谢!很高兴我能帮忙!你可以考虑的一件事是在编码之前对你的交互进行建模。我使用UML序列图来实现这一点,这对我的代码质量是一个福音,在过程中避免了猜测。