- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 Backbone 中,我正在使用新的 Backbone.listenTo
事件。我的一个实例将监听器附加到三个不同的事件,例如:
this.listenTo(this._Collection, 'reset add change', this._setCollection);
它在应该的时候被适本地调用并且那里没有问题。我不知道的是如何找出触发了哪个事件。我可以使用以下方式访问 e
参数:
_setCollection: function(e) {
// Do fun stuff
}
问题在于 e
参数仅发送集合的副本,而没有提及实际触发的事件。我试过 e.type
和 e.target
但这些对象不存在。这是来自 Chrome 开发工具的 e
对象的副本:
_byCid: Object
_byId: Object
_events: Object
add: Array[1]
change: Array[1]
remove: Array[1]
reset: Array[1]
__proto__: Object
_listenerId: "l16"
length: 3
models: Array[3]
如何找到触发的事件?
编辑:答案澄清:虽然标记的答案在技术上是正确的,但正如 mu_is_too_short 所指出的,正确的答案是使用多个处理程序而不是执行这种类型的“欺骗”
最佳答案
您无法直接检测事件类型,但在某些情况下,您可以从 arguments
中推断出来。 . events catalog有这样的话:
- "add" (model, collection, options) — when a model is added to a collection.
- "reset" (collection, options) — when the collection's entire contents have been replaced.
- "change" (model, options) — when a model's attributes have changed.
幸运的是,所有这三个事件都有不同的参数,因此 arguments
的内容将唯一地(在本例中)确定触发事件:
arguments[0]
是一个模型而 arguments[1]
是一个集合,那么您有一个 “add”
事件。arguments[0]
是一个集合,那么您有一个 "reset"
事件。arguments[0]
是一个模型并且 arguments.length
是 2 那么你有一个 "change"
事件。所以你可以在你的 _setCollection
中做一些不愉快和脆弱的事情:
// M is your model, C is your collection.
if(arguments[0] instanceof M
&& arguments[1] instanceof C) {
// An "add" event...
}
else if(arguments[0] instanceof C) {
// A "reset" event...
}
else if(arguments[0] instanceof M
&& arguments.length == 2) {
// A "change" event...
}
else {
console.log('confusion!');
}
演示:http://jsfiddle.net/ambiguous/Y9UUX/
不过,我不推荐这种诡计,它很笨拙、脆弱,如果您向列表中添加更多事件类型,它可能会崩溃。如果您的事件处理程序需要知道触发它的事件类型,那么您最好为每种事件类型使用单独的处理程序:三个函数和三个 listenTo
调用比一小堆丑陋的 hackery 更好.
关于javascript - 如何从 Backbone.listenTo 中查找触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248801/
在 Backbone 对象(模型、 View 、路由器)中,我们可以调用 this.listenTo 像这样 var BodyView = Backbone.View.extend({ initi
下面是我的 View 初始化函数,它在初始化时应该接收模块名称,以便从集合中获取正确的数据。 问题是: Listento 在获取集合后没有重定向到 render() 方法,它还在控制台上给我一个错误
我有以下工作代码,我计划用 object.listenTo 调用替换 object.on 调用: setField: function(field) { if (this.field) this.
listento 仅针对全局集合触发,而不是我在创建时传递给 View 的集合。 例如: var MyView = Backbone.View.extend({ initialize: funct
我是 Backbone 的新手,我有一些代码应该监听属性更改并触发函数。我在网上看到的关于如何使用 listenTo 的所有内容似乎都涵盖了这种情况,所以我不知道我忽略了什么。 为了更好地理解我做了一
我正在尝试收听模型的特定属性(transitions,数字计数)。在 View 中,我有 this.listenTo(this.model, 'change', _.bind(this.transit
我是 Backbone 新手,正在尝试运行以下代码。但我不明白。它无法正常工作。更清楚的是,当我创建集合时,listenTo 不会捕获创建事件。 这是我的代码 var levelIndex=0; va
我是 Backbone 的新手,对事件散列 (events {}) 和您放入初始化方法中的 listenTo 之间的区别感到困惑。你为什么要用一个而不是另一个。事件哈希不是在初始化时设置的吗? 最佳答
我是 Backbone 的新手,我对示例待办事项应用代码的片段感到困惑:http://backbonejs.org/docs/todos.html 在 AppView 对象上有一个名为 addOne
我有一个 型号 其中在 初始化 功能我有以下代码: this.listenTo(this, 'change:re change:read', this.patch); 补丁函数看起来像这样: patc
我正在尝试在我的模型中对自身进行 listenTo 绑定(bind),但无法使其正常工作。我不确定我做错了什么: initialize: function() { this.listenTo(th
我已经开始使用 Backbone。 在学习 Backbone 时,我了解到使用 .listenTo 而不是 .on 的优势在于 listenTo 允许“对象跟踪事件”。 我不明白这句话想表达什么。好吧
我现在坚持了。我收到以下错误: TypeError: listenTo is undefined return listenTo.call(this, evtSource, events, _.
我正在开发一个 Backbone 项目,在 View 的初始化函数内部,我试图在集合上设置一个监听器,如下所示: this.listenTo(this.collection, "change:attr
在 Backbone 中,我正在使用新的 Backbone.listenTo 事件。我的一个实例将监听器附加到三个不同的事件,例如: this.listenTo(this._Collection, '
下面两行代码的优点和缺点是什么?我不明白为什么有两种不同的方法来做同样的事情。 this.listenTo(app.Todos, 'change:completed', this.filterOne)
我正在尝试通过 stub Backbone.View 的 listenTo 回调方法来实现一个简单的测试。 但是,我似乎不能直接这样做——我必须将回调包装在一个匿名函数中。知道为什么会发生这种情况吗?
我的 Backbone 事件系统有问题。 是否可以直接传递jquery函数作为回调? 以下代码不会触发显示/隐藏方法: initialize: function () { this.render(
是否可以为 listenTo 回调绑定(bind)函数参数? 到目前为止,我已经添加了一个包装器方法“myHandler”,我想摆脱它: // Basic marionette layout var
我正在使用第三方延迟加载插件:http://www.appelsiini.net/projects/lazyload 在其源代码中,它具有以下内容: if (0 === settings.event.
我是一名优秀的程序员,十分优秀!