【发布时间】:2014-12-23 03:34:43
【问题描述】:
问题是为什么 Backbone 视图不执行 jQuery 自定义事件处理程序?
我正在尝试侦听文本框中的回车键,当按下回车键时,只有回车键,我想执行一个功能。我正在使用 require.js 2.1.15、jquery 1.11.1、主干 1.1.2 和下划线 1.7。
想法是用jquery注册“enter.js”插件。
(function (factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module depending on jQuery.
console.log("require.js registered");
define(['jquery'], factory);
} else {
// No AMD. Register plugin with global jQuery object.
console.log("no amd registered");
factory(jQuery);
}
}(function ($) {
console.log('registered event listener for input on the enter key');
$('input').keyup(function(e) {
console.log("key input");
if(e.keyCode == 13){
console.log("enter key assessed");
$(this).trigger('enter');
}
})
}));
这会在控制台中正确执行和注册。require.js registered enter.js:12
registered event listener for input on the enter key Problem.js:4
现在主干代码:
define(function (require) {
"use strict";
console.log("start of ArithmeticView.js");
var
$ = require('jquery'),
enter = require('../../$plugins/enter'),
_ = require('underscore'),
Backbone = require('backbone'),
tpl = require('text!tpls/ArithmeticView.html'),
ProblemModels = require('../models/Problem'),
template = _.template(tpl);
return Backbone.View.extend( {
el: 'body',
events: {
"enter .answer": "solve",
},
initialize: function(){
this.render();
this.displayProblem();
},
render: function() {
console.log("render ArithmeticView");
return this.$el.html(template());
},
solve: function() {
console.log("solving ProblemModels.Problem");
var givenAnswer = $(".answer").val();
if(givenAnswer == this.problem.get("answer")) {
return this.displayProblem();
}
return this;
},
displayProblem: function() {
this.problem = new ProblemModels.Problem;
$('.problemArea').text(this.problem.get("question"));
return this;
}
});
});
当我在 Chrome 控制台中调试时,我可以看到附加到 textarea 的输入侦听器并附加了类答案。我在控制台中的任何地方都看不到 jQuery 插件中编码的实际功能代码。
【问题讨论】:
-
尝试将
textarea更改为input,enter.js在inputs 上注册keyup。