这可能只是我不理解Marionette的自动渲染,但我一直在尝试使用.create为我的收藏添加一个模型,并且已经遇到了问题。
调用.create命中服务器,获得成功的响应,并自动点击我的itemView。
我需要做的是调用.create,获得成功的响应,并在我的创建调用中触发回调。
我的代码目前看起来像这样:
collection.create(data, {
wait: true,
success: function(response) {
console.log(response);
},
error: function(error) {
console.log(error);
}
});
我的成功和错误回调完全被忽略,itemView会自动初始化。有什么想法吗?
答案 0 :(得分:0)
我正在尝试重现,但对我来说它运作良好。我在这个例子中使用sinon.js假服务器。希望我的代码可以提供帮助。
HTML:
<div id="app">
<div id="appRegion">nothing yet here</div>
</div>
js:
// fake API
var server = sinon.fakeServer.create();
server.respondWith("GET", "/api/models", [200, {
"Content-Type": "application/json"
},
JSON.stringify([{
'name': 'foo'
}, {
'name': 'bar'
}])]);
server.respondWith("POST", "/api/models", [200, {
"Content-Type": "application/json"
},
JSON.stringify({
'name': 'bazz'
})]);
// application
var Collection = Backbone.Collection.extend({
model: Backbone.Model,
url: "/api/models"
});
var MyApp = Marionette.Application.extend({
regions: {
appRegion: '#appRegion'
}
}),
MyView = Marionette.ItemView.extend({
className : 'myView',
template: _.template('<b><%=name%></b>')
}),
CollectionView = Marionette.CollectionView.extend({
childView: MyView
})
var collection = new Collection();
var myApp = new MyApp({
container: '#app'
});
var collectionView = new CollectionView({
collection: collection
});
myApp.appRegion.show(collectionView);
collection.fetch();
server.respond();
collection.create({}, {
wait: true,
success: function(model) {
console.log('success %o', model);
}
});
setTimeout(function(){
server.respond();
},2000)