问题标签 [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.

0 投票
2 回答
4059 浏览

javascript - 使用 Backbone.js 渲染视图后如何触发事件?

我有很多使用模板的视图。视图渲染完美地工作,现在进入我的路由器,我正在寻找一种在所有视图渲染时触发事件的方法!我使用了像 LAB.js 这样的 js 加载器,但没有任何效果!

在所有渲染之后,我将事件输入到萤火虫控制台中,它的工作!

我可以如何以及在此处放置我的事件,以便在所有视图呈现时触发它!

**我的活动:**

**路由器:**

谢谢

更新: 同样的问题

0 投票
1 回答
384 浏览

javascript - Backbone.js 建模

我是新来的backbone.js,并试图弄清楚,我目前有以下对象:
TodoItem 模型
TodoItemView 视图
TodoCollection 集合

我将一堆 TodoItems 添加到 TodoCollection,它为每个创建 TodoItemViews,这会呈现一个基本的 todo 项目列表。现在,当我单击一个待办事项时,我想打开一个新选项卡,其中包含该待办事项的所有数据,形式为(即可编辑)和一个保存按钮。

我试图弄清楚如何对此建模.. TodoItemView 是否应该有一个点击事件:

  1. 打开一个选项卡并填写所有信息并以某种方式将该新选项卡中的事件绑定到其中的功能?(几乎肯定是错的)
  2. 创建一个新的 EditableTodoItemView,其渲染会打开一个新选项卡,单击 TodoItemView 创建一个新的 EditableTodoItemView 然后忘记它(我认为更好)

我假设 EditableTodoItemView 应该引用原始模型,即 TodoItem 应该在 EditableTodoItemView 和 TodoItemView 之间共享。不需要创建新的集合,当用户点击保存时,EditableTodoItemView 调用backbone.sync()。

同样,我假设当我创建一个新的 TodoItem 时,我将它推送到 TodoCollection,它会为其创建一个 TodoItemView,并且如果项目是新的(即具有默认数据),可能会自动创建一个 EditableTodoItemView。

这有意义吗?还有什么我应该考虑的吗?

0 投票
1 回答
1438 浏览

backbone.js - 调用集合中的方法,当 View 的方法被调用时

我有这样的视图和集合:

我希望在调用 View 的方法 toBasket() 之后调用 Collection 的方法 toBasket()。为此,我在 Collection 中执行以下操作:

所以,如果这可行,我应该在我的 javascript 控制台中收到两条消息:

  1. 看法
  2. 收藏

(也许以其他顺序)

但我只在控制台中看到“查看”消息。我做错了什么?

蒂亚!

0 投票
2 回答
16966 浏览

javascript - 如何使用 Backbone 将调整大小事件添加到视图中的窗口?

我一直在尝试将处理程序附加到我的一个主干视图中的调整大小事件。在做了一些研究之后,我发现您只能将事件附加到视图的元素或其后代。

这对我来说是一个问题,因为我试图实现的视觉效果使用纯 CSS 是不可能的,并且需要一些 JS 来设置基于窗口减去标题元素的内容区域元素的尺寸。

如果你无法想象我想要做什么,想象一个细小的标题和一个内容区域,它必须占据剩余空间,没有 CSS 背景技巧。

0 投票
2 回答
4690 浏览

javascript - 在构建集合后让backbone.js运行一个函数?

我可能在这里完全遗漏了一些东西,但我有以下几点:

  • 封装“所有”数据的模型(从一个 URL 加载的所有 JSON)
  • 该模型有一个(或多个)集合,它正在使用它在构建时获得的数据进行实例化
  • 初始化和加载数据时我想在集合上运行的一些代码

我的问题是关于组合的集合。我可以在 Collection 范围之外执行此操作,但我宁愿封装它(否则将其设为具有初始化程序等的“类”有什么意义)。

  1. 我以为我可以将该代码放入initialize()函数中,但该代码在填充模型之前运行,因此我无权访问包含集合的模型(this.models为空)。

  2. 然后我以为我可以绑定到一个事件,但是初始化后没有触发任何事件。如果我从它自己的端点加载集合,它们将是fetch,但我没有这样做,我正在从预先存在的数据初始化集合。

我的问题:如何在使用数据初始化后立即在 Collection 上运行初始化代码(即this.models不为空)。

是否可以在不涉及“外部”代码的情况下做到这一点?

好的,这里是演示代码,也许这会更好地解释事情。

0 投票
1 回答
1213 浏览

javascript - 有没有办法听 Html 元素样式的变化 - Backbone.JS

我有以下 HTML 模板:

显示是display: nonedisplay: block取决于某些事情。

我想要这样的观点:

当我change:display在 display 时,我的意思是听 el 样式显示属性的变化。

有可能这样做吗?

0 投票
1 回答
360 浏览

javascript - Backbone JS 事件函数修改对象

我正在使用 BackboneJS 开发一个相当复杂的应用程序。我有一个用于发布/订阅事件的 Globals 对象。挑战在于,似乎没有一种有效的方法来使用事件驱动架构解耦功能。

我正在考虑更多像 Magento 这样的事件系统。你看,在 Magento 中,你调用dispatchEvent并传递一个对象。Magento 中的下一行(这将是中断,这意味着它正在等待该事件的所有订阅者首先执行),您可以再次访问这些对象。这种方式的好处是订阅事件的任何函数都会被传递一个它可以修改的对象,然后返回该对象。

因此,当订阅者完成执行后,我们可以获取这个修改后的对象并完成执行。在 JS 中,这将是一个回调,但想法是一样的。

所以我的问题:

  • 您是否知道 Backbone 中有类似的东西?
  • 有你知道的插件吗?

感谢您的时间!

0 投票
1 回答
3342 浏览

backbone.js - 如何将主干表单链接到事件?

我正在尝试使用backbone 实现一个简单的登录表单,使用主干表单库。

我的 HTML 有一个 id='formHook' 的 div,页面显示了一个带有登录按钮的表单。但是按下按钮什么也没做。

我在这里做错了什么?

0 投票
1 回答
1554 浏览

javascript - 如何取消绑定 Backbone Collection 获取回调?

如果我有一个视图,其中有一个在初始化函数中获取的集合,但视图需要在获取返回之前清理,我如何取消绑定成功和/或错误回调?

因此,使用这样的代码:

当我调用 myView.close() 来清理它(在这种情况下显示另一个视图),并且我不想稍后调用successCallback(在视图“清理”之后)。

我试过了:

但是该集合似乎在 fetch 后的 _callbacks 内部 var 中没有列出 this 事件,因此 unbind 似乎没有帮助。

0 投票
1 回答
1185 浏览

javascript - 使用骨干路由器回调突出显示所选项目

应用程序布局

我有一个应用程序,带有一个包含许多项目的侧边栏和一个显示这些项目的主div。还有一个简单Backbone.Router的,一个ItemsCollection和一个Item模型。我有一个SidebarView侧边栏和一个ShowView来显示所选项目。

在启动时,我初始化SidebarViewMainRouter。将SidebarView其方法附加renderItemCollection#all事件。我还将ItemCollection#refresh事件附加到Backbone.history.start(),然后获取ItemCollection.

问题

我想突出显示当前选定的项目。这通过绑定route.show来自路由器的事件来工作:

当我在加载应用程序时选择一个项目时,它可以完美运行。#/show/123但是当页面作为 URL加载时,该项目不会突出显示。highlight_item我运行调试器并发现,当调用回调时,侧边栏尚未呈现。

可能的解决方案

有没有办法重新排序绑定,以便Item#refresh事件首先调用SidebarView#render然后开始路由?

也许一种解决方法只是从window.router(我没有在 Backbone Docs 中找到任何方法)获取当前路由并在渲染时突出显示该项目?

或者我的初始化只是愚蠢的,我应该以不同的方式处理事情吗?