Backbone / Marionette collection.create不会触发回调

时间:2014-01-17 10:32:57

标签: javascript backbone.js marionette

这可能只是我不理解Marionette的自动渲染,但我一直在尝试使用.create为我的收藏添加一个模型,并且已经遇到了问题。

调用.create命中服务器,获得成功的响应,并自动点击我的itemView。

我需要做的是调用.create,获得成功的响应,并在我的创建调用中触发回调。

我的代码目前看起来像这样:

collection.create(data, {
    wait: true,
    success: function(response) {
        console.log(response);
    },
    error: function(error) {
        console.log(error);
    }
});

我的成功和错误回调完全被忽略,itemView会自动初始化。有什么想法吗?

1 个答案:

答案 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)