环顾四周,但找不到任何有用的东西,所以..
我有一个带有联系人卡片 View 的 Backbone.js 联系人模型。此 View 有许多输入,您可以在其中编辑联系人信息。
页面上有许多其他表单不是 Backbone 模型,因此它们使用“保存按钮”进行保存。我基本上希望这个保存按钮也触发 Contacts.CardView.saveCard();
(也可能是 FileApp.cardView.saveCard?
- 我的一些代码如下。
有什么办法可以做到这一点吗?我以为我可以使用以下内容,但它似乎不会将事件绑定(bind)到 View 之外的任何内容?:
events: {
"change input": "change",
"click #save": "saveCard"
},
$('#save').click(function() {
FileApp.cardView.saveCard;
_SAVE.save();
})
卡片 View
window.Contacts.CardView = Backbone.View.extend({
events: {
"click #save": "saveCard" // doesnt work because #save is outside the view?
},
saveCard: function(e) {
this.model.set({
name:$('#name').val()
});
if (this.model.isNew()) {
var self = this;
FileApp.contactList.create(this.model, {
success:function () {
FileApp.navigate('contacts/' + self.model.id, false);
}
});
} else {
this.model.save();
}
return false;
}
}
路由器:
var FileRouter = Backbone.Router.extend({
contactCard:function (id) {
if (this.contactList) {
this.cardList = new Contacts.CardCollection();
var self = this;
this.cardList.fetch({
data: {
"id":id
},
success: function(collection, response) {
if (self.cardView) self.cardView.close();
self.cardView = new Contacts.CardView({
model: collection.models[0]
});
self.cardView.render();
}
});
} else {
CONTACT_ID = id;
this.list();
}
}
});
var FileApp = new FileRouter();
最佳答案
一种选择是为此情况创建您自己的事件对象:
// Before initializing views, etc.
var formProxy = {};
_.extend(formProxy, Backbone.Events);
// Add the listener in the initialize for the CardView
window.Contacts.CardView = Backbone.View.extend({
initialize : function() {
formProxy.on('save', this.saveCard, this);
},
saveCard: function() {
this.model.set({
name:$('#name').val()
});
if (this.model.isNew()) {
var self = this;
FileApp.contactList.create(this.model, {
success:function () {
FileApp.navigate('contacts/' + self.model.id, false);
}
});
} else {
this.model.save();
}
return false;
}
}
// Save
$('#save').click(function() {
formProxy.trigger('save');
});
关于javascript - 从另一个js函数触发Backbone事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377211/