- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现backbonejs不同元素的用法相当模糊。根据我的理解,这是因为主干不想成为一个框架,而更多地是一组工具/对象。
我理解backbonejs的大部分内容,但我仍然质疑 View 的initialize()和render()调用的正确用法是什么。换句话说,每个逻辑中应该放置什么逻辑。
有人可以解释一下什么是最佳实践,或者什么被认为是 View 中这些调用的正确用法?
最佳答案
这是一个相当广泛的问题,但我会尝试一下。这里的关键是这些调用不存在“正确用法”。 Backbone 具有灵 active ,旨在适应您的需求。这就是为什么它在一个更复杂但“固执己见”的框架世界中仍然占有一席之地(它告诉你这是“我的方式还是高速公路”)。
Backbone 在渲染方面没有使用任何魔法。 render()
方法是无操作的,甚至不会自动为您调用。它的存在只不过是暗示通常如何做事情。
但是,实例化 View 时会自动调用 initialize()
方法。 Backbone 保证此时 View 的顶级 DOM 元素(el
)已经创建并准备好附加内容。
但同样,这非常小:顶级元素在那里,但尚未附加到 DOM(除非您将 options.el
传递给构造函数,设置 el
到现有元素)。将 el
插入 DOM 也是您的工作。
因此您可以自由决定如何连接。我通常做的是这样的:
我的大多数 View 都有一个模板,该模板通常分配给 View 的 template
属性。 (再次强调,这只是一个约定,不涉及任何魔法。您可以将其命名为 foo
。)该模板在 initialize()
中编译。
在initialize()
中,我设置了与 View 应该表示的模型或集合的关系。即, View 观察模型/集合事件,并在数据更改时调用渲染。 (当然,您不必使用 Backbone 实体作为数据源......可以是任何东西)。
在render()
中,数据被输入到模板中,结果成为el
的innerHTML。然后,我确保 el
已插入 DOM(如果尚未插入)。
第一次调用 render()
应该在数据准备好时发生。正确的时机取决于应用程序。也许 render()
是 initialize()
中的最后一个调用,或者某些事件稍后会启动它。
如果您觉得其中很多听起来像是重复的样板,是的,确实如此。类似 Marionette 的框架存在于 Backbone 之上来处理这个问题。
但是这个框架魔法会带来严重的性能损失。因此,当我必须生成大量 View 时,我坚持使用通用的 Backbone 内容(并使用我的 own components 之一来加速模板处理。)
关于javascript - backbonejs View 的initialize()和render()的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40930340/
我正在使用 Backbonejs 和 Requirejs 创建单页 Web 应用程序。我的应用程序似乎存在内存泄漏。 为了测试,我创建了一个示例代码。它创建一个 View 对象,调用其 render
我从加载对话框的位置有一个详细信息 View 。 此对话框有一个表单,用户可以在其中输入一些值(对应于我的模型属性) 我从详细信息 View 传递模型并在同一模型中设置值(在表单字段的更改操作上) 现
我正在尝试添加 Jquery Jplayer http://jplayer.org到我的 Backbone 应用程序,但无法运行它。我将脚本设置到 RequireJS 配置文件中,控制台告诉我脚本已加
Click here for the js fiddle example 此模板应该在集合中呈现新消息,我正在尝试遵循 this tuorial使用我自己的版本来呈现消息
由于某种原因,我在保存模型时无法输入 success 和 error block 。无论我的响应是成功“201”还是错误“404”,我的代码都不会命中 debugger 行。有谁知道可能出了什么问题吗
我有一个BackboneJS应用程序,可在 View 上显示Youtube视频。因此,当用户单击缩略图时,Youtube-iframe将打开并播放视频。当用户关闭它并想再次播放时,什么也没有发生。为了
我刚刚开始学习 BackboneJS,我正在编写一个小示例文档来测试它的工作方式。但我很难理解它,目前它根本没有任何意义:) 所以,我有下一个文件结构: /* application.js */ va
在我的 Backbone.js 应用程序中,我有一个路由结构,其中包含一些我只想在一个处理程序中处理的公共(public)部分。例如,这些 URL /#scenario/1/show-report /
我刚刚开始学习backbonejs。这是我的一些演示代码行: var i = 0; Player = Backbone.Model.extend({
我有一个 Backbone 应用程序,使用 HandlebarsJS 作为我的 HTML 模板。现在我有一个按钮可以触发登录弹出框。我的问题是,我必须双击按钮/链接,直到弹出窗口打开。这是为什么??我
我是 Backbonejs 的新手,试图理解这里的模型。我定义了一个这样的模型 var Employee=Backbone.Model.extend({ initialize: functi
在 BackboneJS 的 router.js 中使用 this.initialize(); 和 有什么区别 require(['router'],function(Router) { ro
我正在使用 Rails 3.1 mongodb 和 backbonejs 构建小型单页应用程序。 我有两个可通过 json api 获得的资源。我在 backbone 中创建了两个模型和集合,看起来像
我可以在哪里进行一些计算,例如计算员工工资?是否需要使用外部文件,或者我可以使用模型、集合或 View ? 最佳答案 模型的属性表示数据实体(员工)的状态。它的方法应该改变数据实体的状态。所以模型的方
我在表单和表单数据中有一个上传图像。表单数据存储在模型中 如何将表单数据与文件数据结合并保存模型 我正在设置模型属性以及如何在属性中包含文件数据。我找到了这个链接 Forcing Backbone t
我将 Tastypie 用于我的 RESTful api,将 Backbonejs 用于前端。模型的 fetch 工作正常,但是,对于 Backbone.Collection 我似乎得到了错误的回应:
我有一个代表产品的模型(在 UL 中显示为 LI 项目)和一个包含这些产品的集合。 当我单击一个 LI 时,我希望基础模型的属性设置为 true,而集合中的所有其他模型的属性设置为 false。 //
我想在我的页面顶部创建一个固定位置的导航菜单,它应该在我点击相关链接后显示不同的 View 。我有一个 index.php 文件、一个 mainpage.js 文件和用于集合、模型、 View 、路由
您好,我是 Backbone 的新手,我只是稍微尝试了一下,这是我的代码: var Users = Backbone.Collection.extend ({ url : 'h
我的应用程序的索引页面位于http://cms/admin(我在本地主机上)。索引页上只有一个 a 元素: deneme 当我点击链接时,它会转到/cms/admin/test 我想使用 Backbo
我是一名优秀的程序员,十分优秀!