Event.target.id未定义?使用backbone.js创建动态按钮
event.target.id as undefined ? Creating dynamic buttons using backbone.js
我有一个section
元素与id = wrapper
。在我的路由器中,我添加了.delegate()
jQuery方法来将事件委派给动态创建的按钮(因为传统的events:{"click button" : "gotoSomeMethod"}
不适合我)。
$(document).ready(function() {
window.App = new window.Routers.Package;
Backbone.history.start();
$('#wrapper').delegate("button", "click", function(ev){
alert ($(ev.target).id);
});
});
这是我的观点,
window.Views.Actions = Backbone.View.extend({
tag: 'nav',
initialize: function() {
_.bindAll(this, 'render', 'gotoNode');
},
render:function(){
this.model.each(function(action){
var buttonTemplate = "<button id = '" + action.toNodeId + "'>" + action.name + " </button>";
$(this.el).append(buttonTemplate)
}, this);
console.log(this.el); // when I do this I get `<div><button id = 'something'></button></div>`
return this;
},
events:{
"click button":"gotoNode"
},
gotoNode:function() {
alert("inside gotoNode");
},
});
所以这里的第一个问题是为什么我得到未定义为一个id
?其次,如何使主干调用gotoNode()
方法?
jQuery函数$
返回一个jQuery
对象,而不是DOMElement。如果您想访问该元素的id,则需要使用$(ev.target).attr("id")
。你也不应该使用ev.target
。它返回被单击的DOMElement,它可以是按钮,但也可以是按钮内的TextNode。在第二种情况下,您将没有id属性。您需要使用的是$(this).attr("id")
。
对于gotoNode
部分,如果您在视图中执行事件绑定(将委托调用移动到初始化方法中),则更有意义。
initialize : function () {
_.bindAll(this, 'render', 'gotoNode');
var self = this;
$('#wrapper').delegate("button", "click", function(ev){
self.gotoNode();
});
}
如果你想让gotoNode()
方法工作,你必须把你的按钮放在this.el
。
相关文章:
- 更改使用Chart.js创建的图表中的轴线颜色
- 为node.js创建一个动态的restful api
- 使用transducer-js和most.js创建一个从Json到streams的管道
- 基本D3.js:创建或更新元素
- 如何使用d3.layout.cloud.js创建一个包含单词及其权重的csv的单词云
- 使用sinon.js创建一个“;“间谍对象”;使用基于真实构造函数/原型的间谍方法
- 主干网的生命周期.js创建过程中的视图
- 如何使用条带和节点.js创建费用
- Kinetic.js–创建网格
- Node.js创建一个模块来收集内存(ram)信息
- 使用Sequelize.js创建简单PUT请求时出错
- 在页面重新加载后绑定事件,并仅使用Knockout.js、html和js创建新的html元素
- JS:创建从索引0开始的所有子字符串的最快方法
- 使用纯JS创建具有id和样式的元素
- 如何为Sails.js创建启动/停止/重新启动Linux服务
- 如何使用Fabric.js创建多个形状
- 如何在没有类属性的情况下使用Rangy.js创建标记
- 关于使用JS创建和附加元素的良好实践
- 如何使用原生JS创建脚本的完整副本
- D3.js-创建一个矩形