我的设置非常简单......
设置一个路径,使用bootstrap调用模态对话框。当单击菜单时,headerView调用方法 -
menuClick: function(e){
e.preventDefault();
if (!this.myView) {
this.myView= new MyView({model: new MyModel()});
}
this.myView.render();
},
在MyView中,我在初始化
中调用bindinitialize: function(){
this.model.bind('sync', function(model){ alert('test view')});
}
在按钮点击事件中调用Backbone.sync:
var response = Backbone.sync('read', this.model, {
success: function(data, textStatus, jqXHR) { alert('success'); },
error: function(data, textStatus, jqXHR){ alert(fail); }
});
同步中的警报被调用...但是初始化中的bind命令中的警报永远不会被调用。尝试在模型中移动绑定,将其移出,也尝试同步:失败,同步:完成。没有成功。
答案 0 :(得分:4)
没有触发任何事件,因为您没有这样说。您正在传递明确的success
和error
回调,这些回调是必须负责触发事件的回调。
来自高层命令的原始Backbone.sync
调用save
,create
,fetch
接收success
和error
回调触发事件,但您使用自己的事件,以避免这种本机行为。
适用于example in the Model.save
,in the Model.destroy
等等。
但是,正如我在之前的评论中所说,你真的应该考虑是否真的需要直接调用Backbone.sync
而不是使用更高层的方法,如Model.fetch()
。
答案 1 :(得分:2)
尝试像这样实现Backbone.sync:
var sync = Backbone.sync;
Backbone.sync = function (method, model, options) {
var success = options.success;
options.success = function (resp, status, xhr) {
//Your logic goes here
console.log('succeed');
if (success) success(resp, status, xhr);
};
options.error = function (xhr, ajaxOptions, thrownError) {
console.log('failed');
}
sync(method, model, options);
};