问题标签 [backbone-events]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 绑定到集合中的“添加”/“删除”时,Backbone.js 中的“this”出现奇怪行为
我有以下两个基于 Backbone.js 的视图
这是我遇到的问题。
我有一个用户创建两个部分的视图,假设它们被称为“section1”和“section2”。这些名称用在它们的“title”属性中。
这是我观察到的奇怪行为:
当用户在“section1”并添加和项目时,“add”绑定事件被触发,这导致“section2”被写入控制台。
当用户在“section1”并添加和项目时,“remove”绑定事件被触发,这导致“section1”被写入控制台。
当用户在“section2”并添加和项目时,“add”绑定事件被触发,这导致“section2”被写入控制台。
当用户在“section2”并添加和项目时,会触发“remove”绑定事件,这会导致“section2”和“section1”被写入控制台。
如果我使用“this.addItemToSection”在“pg.views.Section”视图中绑定“add”,它不应该只调用该实例内的“addItemToSection”块吗?
我可以看到“重新定义”“this”的唯一行是“pg.views.ItemList”的初始化块中的“add”绑定。如果该行是罪魁祸首,我如何防止它重新定义“section1”的“add”绑定上的“this”?
javascript - 在带有主干的jQuery中单击绑定
我正在使用 Backbone.js,在我的一个主要观点中,我遇到了一个非常奇怪的错误,我一生都无法弄清楚如何解决。
该视图看起来像新的 Twitter 布局。它接收一个对象数组,每个对象描述一个集合并查看作用于该集合的元素。每个集合由视图中的一个选项卡表示。我的视图中的方法采用这个集合对象数组,如果 DOM 元素不是空的,则render()
清除它,呈现选项卡,然后将事件绑定到每个选项卡。tabContainer
现在,在我的代码中,我拥有了呈现选项卡的方法以及将点击处理程序按顺序绑定到这些选项卡的方法。这在我第一次执行时工作正常render()
,但在随后的调用中render()
,点击处理程序没有绑定。这是相关的代码片段:
正如我所说,render()
这里的方法确实有效,但只是第一次。奇怪的是,如果我移动该行this._bindTabEvents();
并将其设置为openTab()
方法的第一行,就像下面的代码片段一样,那么整个事情就可以完美地工作:
当然,那行代码与该方法无关,但它确实使整个事情工作正常,这让我问为什么它在那里工作,但不像这样按顺序工作:
这对我来说毫无意义,因为如果我把它放在这一行之后,它也不起作用:
即使就执行顺序而言,这基本上与起作用的方法相同。
有谁知道我做错了什么以及我应该做些什么来使它正确(在行为和编码风格方面)?
javascript - 在Javascript中添加日志而不污染源代码
我想在 Web 应用程序中引入日志记录(用于分析),而不会通过在各处插入日志语句来污染源代码。该应用程序是 Javascript 繁重的。在 Java 应用程序中,我们可以通过使用面向方面的编程来做类似的事情,并保持基本源代码干净。是否有可能在 Javascript 中实现类似的功能?
我目前正在考虑的一种方法是单独加载日志记录代码并让它监听感兴趣的特定事件。由于我们正在考虑使用backbone.js,我们希望有一个事件驱动的机制来发布各种事件。然后应该可以监听特定事件并记录它们。
我想听听开发人员尝试过的其他方法/框架。
javascript - 销毁或删除 Backbone.js 中的视图
我目前正在尝试为视图实现销毁/删除方法,但我无法获得适用于所有视图的通用解决方案。
我希望有一个事件可以附加到控制器,这样当一个新请求通过时,它会破坏以前的视图,然后加载新的视图。
有什么方法可以做到这一点,而不必为每个视图构建一个删除功能?
events - Backbone 视图中的事件侦听器未添加到 DOM 中的对象
我一直在努力完成我的第一个 Backbone 应用程序,并且已经开始掌握事情的窍门。我现在有一些成功的报告,它们从我的服务器 (NodeJS) 加载 JSON 数据,填充模板 (Handlebars),并在前端相对较好地呈现。
我遇到的问题是我正在尝试将事件处理程序添加<select>
到来自我的一个模板的对象中,但我运气不佳。
这是模板:
这是主干视图:
注意:我从内部调用视图,$ ->
所以它不应该加载,直到DocumentReady
我希望任何时候单击或更改下拉菜单,我都会看到该selectStylist
函数被触发。不幸的是,这还没有发生 :( 我还检查了 Chrome 开发工具中的元素,并且没有在对象上设置事件侦听器。
我已经坚持了好几个小时,并且已经查看了 Backbone 事件侦听器的所有其他建议(即在this.el
实例化您的视图时将您的作为参数传递),但没有取得任何成功。
任何帮助或想法将不胜感激!
javascript - 主干.js 事件和 el
好的,所以我已经阅读了有关 Backbone 视图和未触发事件的其他几个问题,但是我仍然没有很遗憾地得到它。我和 Backbone 搞混了大约一天,所以我确定我错过了一些基本的东西。这是我正在使用的 jsfiddle:http: //jsfiddle.net/siyegen/e7sNN/3/
GridView 上的okay
事件不会触发,我假设是因为div.grid-view
第一次绑定事件时不存在。我应该如何处理动态构建在视图上的事件的绑定和触发?(另外,这是一个简短的例子,但如果我做了其他不应该做的事情,请随时对我大喊大叫)
javascript - 骨干模型:有没有办法区分初始保存事件和后续事件?
问题的标题几乎概括了它,我希望我的观点对模型实例的初始保存与任何未来保存做出不同的响应。现在我在isNew
保存之前获取模型的属性,然后触发自定义事件,但我想知道是否有内置的东西?
javascript - Backbone.js 突出显示因页面上的大量数据而损坏
我在应用程序中使用 Backbone.js。我将段与网址相关联。所以一个段可以包含许多 url,并且给定的 url 可以在任何段中。有一个 url 窗格和一个段窗格。问题是突出部分。所以,当我点击一个片段时,我想突出显示它的网址。我已将页面上显示的 url 数量限制为 200。如果 url 超过 200 个,我们只向用户显示前 200 个,其余的,用户只需使用实时搜索来查找他正在寻找的 url . 问题是当 URL 少于 200 个时,当我单击一个段时,突出显示有效。当有超过 200 个 url 并且当用户点击一个段时,突出显示不起作用。如果有超过 200 个 url,我将在集合上使用 slice,只需突出显示前 200 个,但这不起作用。这是代码片段。有人对如何解决这个问题有什么好的建议吗?
在 SegmentView.js 中为toggleSelection
函数:
javascript - 有没有办法使用 Backbone 和/或 Backbone-Relational 将事件绑定到所有嵌套模型?
我有一个非常强大的 BackboneRelational - 模型,它有许多嵌套模型和集合。基本上,如果用户更改了关于这个模型或其子模型/集合的任何内容,我需要在 UI 中做一些事情来表明这一点。所以我想要一个无论子模型改变都会触发的主改变事件。是否有捷径可寻?我编写了一个函数,它递归地遍历我的所有模型并添加一个更改事件,但是我在绑定到同一个模型两次、竞争条件等方面遇到了问题。
javascript - 如何跟踪未同步到服务器的模型更改?
我有一个表单,它使用执行很多set
方法的更改事件来更新我的模型。
使用 Derick Bailey 出色的模型绑定插件可以自动实现相同的功能。
无论如何,模型在更改形式时会不断更新。但是,除非我单击实际执行model.save();
调用的保存按钮,否则这些更改都不会进入数据库。
因此,如果我现在通过以下方式离开表单:
- 浏览器的后退按钮
- 导航中的其他按钮打开另一个视图
很明显,模型是用它的新名称保存的,但它从未保存到数据库中,(刷新F5显示)
我正在寻找一个有用的解决方案来解决这个问题;到目前为止,我一直在想:
- 在表单元素的任何模糊事件上添加一个
model.save()
(仍然会导致对服务器的许多保存调用仅针对 1 个模型 *不理想 - 试图在表单退出时破解 *不理想
- 试图将模型恢复到原始状态(模型重置或类似)
*不理想:用户确实离开了表单,表明他不希望保存它的数据,在这里我无论如何都试图破解保存。
我将如何将模型重置为更改表单之前的状态?