Backbone.js 样板集合视图不';不更新?
我已经在我的网站上用yeoman generator bbb创建了一个小应用程序。问题是集合视图没有更新 以下是主要代码: app.js: 路由器.jsBackbone.js 样板集合视图不';不更新?,backbone.js,backbone-views,backbone-routing,Backbone.js,Backbone Views,Backbone Routing,我已经在我的网站上用yeoman generator bbb创建了一个小应用程序。问题是集合视图没有更新 以下是主要代码: app.js: 路由器.js define(function(require, exports, module) { var app = require("app"); var Music = require("modules/music"); // Defining the application router. module.expo
define(function(require, exports, module) {
var app = require("app");
var Music = require("modules/music");
// Defining the application router.
module.exports = Backbone.Router.extend({
initialize: function() {
var collections = {
musics: new Music.Collection()
};
_.extend(this, collections);
app.ui.setViews({
".musics": new Music.Views.List(collections)
}).render();
},
routes: {
"": "index",
"tag/:name": "tag"
},
index: function() {
this.reset();
},
tag: function(name) {
this.reset();
this.musics.tag = name;
this.musics.fetch();
},
reset: function() {
if (this.musics.length) {
this.musics.reset();
}
},
go: function() {
return this.navigate(_.toArray(arguments).join("/"), true);
}
});
});
music.js:
define(function(require, exports, module) {
// music module dependedn on app
var app = require("app"),
Music = module.exports = {};
Music.Collection = Backbone.Collection.extend({
url: function() {
return "https://api.douban.com/v2/music/search?tag=" + encodeURIComponent(this.tag) + "&callback=?";
},
cache: true,
parse: function(res) {
if ( res.musics.length ) {
this.status = "valid";
return res.musics;
}
this.status = "invalid";
return res;
},
initialize: function(models, options) {
if (options) {
this.tag = options.tag;
}
}
});
Music.Views = {};
// set the list view
Music.Views.List = Backbone.View.extend({
template: "music/list",
serialize: function() {
return { collection: this.options.musics };
},
events: {
"submit form": "updateMusic"
},
updateMusic: function() {
app.router.go( "tag", this.$('form').find('input').val() );
return false;
},
beforeRender: function() {
this.options.musics.each(function(music) {
this.insertView("ul", new Music.Views.Item({
model: music
}));
}, this);
},
afterRender: function() {
this.$("input.invalid").focus();
},
initialize: function() {
this.listenTo(this.options.musics, {
"reset": this.render,
"fetch": function() {
this.$("ul").parent().html("搜索中请稍候......");
}
});
}
});
// set the item view
Music.Views.Item = Backbone.View.extend({
template: "music/item",
tagName: "li",
serialize: function() {
return { model: this.model };
},
initialize: function() {
this.listenTo( this.model, "change", this.render() );
}
});
});
看起来您正在进行跨域请求。您已经设置了
url
,以便它接受回调。现在,您不会让主干网知道这是一个jsonp
请求
尝试将dataType:'jsonp'
属性传递给获取请求
tag: function(name) {
this.reset();
this.musics.tag = name;
this.musics.fetch({
dataType : 'jsonp'
});
},
而且我也看不到您所指的视图中任何地方定义的2个方法
"reset": this.render,
this.insertView("ul",
哦,谢谢Sushanth。我使用包含主干布局管理器的主干boilerate。insertView是api中的方法。顺便说一句,我引用了github查看器,它没有添加数据类型。。
"reset": this.render,
this.insertView("ul",