我想在Backbone中实现可逆动画,就像我们在jquery中一样:
$('a.contact').toggle(
function(){
// odd clicks
},
function(){
// even clicks
});
我的问题是如何在骨干的事件语法中执行此操作? 怎么做我模仿功能,功能设置?
events : {
'click .toggleDiv' : this.doToggle
},
doToggle : function() { ??? }
答案 0 :(得分:15)
Backbone的视图事件直接委托给jQuery,并允许您通过回调方法访问所有标准DOM事件参数。因此,您可以轻松地在元素上调用jQuery的toggle方法:
Backbone.View.extend({
events: {
"click a.contact": "linkClicked"
},
linkClicked: function(e){
$(e.currentTarget).toggle(
function() {
// odd clicks
},
function() {
// even clicks
}
);
}
});
答案 1 :(得分:4)
我一直在寻找这个问题的解决方案,我只是采用老式的方式。我还希望能够从我的应用程序中的其他视图中找到我的hideText()方法。
所以现在我可以从任何其他视图检查'showmeState'的状态,并运行hideText()或showText(),具体取决于我想用它做什么。我试图通过删除渲染和初始化之类的东西来简化下面的代码,以使示例更加清晰。
var View = Backbone.View.extend({
events: {
'click': 'toggleContent'
},
showmeState: true,
toggleContent: function(){
if (this.showmeState === false) {
this.showText();
} else {
this.hideText();
}
},
hideText: function() {
this.$el.find('p').hide();
this.showmeState = false;
},
showText: function() {
this.$el.find('p').show();
this.showmeState = true;
}
});
var view = new View();
答案 2 :(得分:0)
您要在接收活动的视图中切换元素吗?如果是这样的话:
doToggle: function() {
this.$("a.contact").toggle()
}
答案 3 :(得分:0)
我实际上相信使用events
执行此操作的唯一方法是添加trigger
以便将实际流量保持在一起。诚实地说,以这种方式使用切换似乎有点笨拙。
Backbone.View.extend({
events: {
"click .button": "doToggle"
},
doToggle: function(e){
var myEle = $(e.currentTarget);
$(e.currentTarget).toggle(
function() {
// odd clicks
},
function() {
// even clicks
}
);
myEle.trigger('click');
}
});
使用
可能更干净Backbone.View.extend({
el: '#el',
initalize: function() {
this.render();
},
doToggle: {
var myEle = this.$el.find('.myEle');
myEle.toggle(
function() {
// odd clicks
},
function() {
// even clicks
}
);
},
render: function(e){
//other stuff
this.doToggle();
return this;
}
});