【发布时间】:2015-01-03 11:44:59
【问题描述】:
我有文本工具栏:http://take.ms/V4b1g
这是“backbone.view”函数:
define([
'View/Popup',
'text!Templates/Toolbar/Edit.tpl'
], function(Popup, _edit){
var Edit = Backbone.View.extend({
className: 'svs-cke',
events:{
'mousedown': 'mousedown',
'click .bold': 'toggleBold',
'click .italic': 'toggleItalic',
'click .underline': 'toggleUnderline',
'click .link': 'toggleLink',
'click .size': 'toggleSize',
'keypress [name="size"]': 'setSize',
'keypress [name="link"]': 'setUrl'
},
initialize: function(){
},
render: function(){
this.$el.append(_.template(_edit).apply(this.options));
return this.$el;
},
mousedown: function(e){
if(e.target !== this.$el.find('[name="link"]').get(0)){
//e.preventDefault();
}
},
toggleSize: function(e){
this.$el.find('[name="size"]').val(this.options.size.attr('class'));
this.$el.find('[name="size"]').show();
this.$el.find('[name="size"]').focus();
},
setSize: function(e){
if(e.which == 13){
e.preventDefault();
var url = $(e.currentTarget).val();
if(url.length > 0){
this.options.size.attr('class', url);
this.options.size.trigger('sizeChange');
}else{
this.options.size.attr('class', '#');
this.options.size.trigger('sizeChange');
}
$(e.currentTarget).hide();
}
},
toggleBold: function(e){
document.execCommand('bold', false, null);
$(e.currentTarget).toggleClass('t-active');
},
toggleItalic: function(e){
document.execCommand('italic', false, null);
$(e.currentTarget).toggleClass('t-active');
},
toggleUnderline: function(e){
document.execCommand('underline', false, null);
$(e.currentTarget).toggleClass('t-active');
},
toggleLink: function(e){
if(this.options.nodes.url){
this.$el.find('[name="link"]').val(this.options.nodes.url);
}
this.lastRange = window.getSelection().getRangeAt(0);
this.$el.find('[name="link"]').show();
this.$el.find('[name="link"]').focus();
},
setUrl: function(e){
if(e.which == 13){
e.preventDefault();
this.$el.find('[name="link"]').blur();
window.getSelection().addRange(this.lastRange);
var url = $(e.currentTarget).val();
if(url.length > 0){
document.execCommand('createLink', false, url);
}else{
document.execCommand('unlink', false, null);
}
$(e.currentTarget).hide();
this.$el.find('.link').toggleClass('t-active');
}
}
});
return Edit;
});
当我试图点击这个时:http://take.ms/X7dpz 我遇到了这个错误:
Uncaught TypeError: Cannot read property 'attr' of undefined
在这一行:
this.$el.find('[name="size"]').val(this.options.size.attr('class'));
我在这行做错了什么?谢谢!
【问题讨论】:
-
你没有在选项中传递大小))请显示你实例化你的类的代码(比如 $var = new Edit() ) - 你应该在 new Edit() 构造中传递一些对象 -它必须包含 size 属性
标签: javascript backbone.js attributes attr