gpt4 book ai didi

javascript - 我应该在 Backbone.js 中避免这种情况吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:55:53 25 4
gpt4 key购买 nike

我越来越喜欢 backbone.js。我希望对给定模型有多个 View :

  • 一个 ListView ,其中每个模型都有一个带有自己的 li 元素的 View 。
  • 显示模型所有细节的详细 View 。

我的问题是,我正在寻找一种允许一个 View 与另一个 View 进行通信的好方法,并选择了以下方法:

/** Allow a model to keep track of it's views. **/
Backbone.Model.prototype.addView = function (view) {
// Ensure our model has a view array.
if (typeof this.views === 'undefined')
{
this.views = [];
}

// Append our newest view to the array only if it is not already present.
if (_.indexOf(this.views, view) === -1)
{
this.views.push(view);
}
}

/** Allow a model to remove all of it's views.
*
* @param {Object} args Any arguments will be provided to the view's method.
*/
Backbone.Model.prototype.unloadViews = function (args) {
var n = (typeof this.views === 'undefined') ? 0 : this.views.length;
for (var i = 0; i < n; i++)
{
var view = this.views[i];
if (typeof view.unloadView === 'function')
{
view.unloadView(args);
}
}
}

/** Allow a model to re-render all of it's views.
*
* @param {Object} args Any argyments will be provided to the view's method.
*/
Backbone.Model.prototype.renderViews = function (args) {
var n = (typeof this.views === 'undefined') ? 0 : this.views.length;
for (var i = 0; i < n; i++)
{
var view = this.views[i];
if (typeof view.render === 'function')
{
view.render(args);
}
}
}

我的问题

  1. 我在学习 backbone.js 时是否遗漏了一些可以让我天生做到这一点的东西?
  2. 我有理由避免这种情况吗?

附加信息

我已经在 GitHub 上分享了这个应用程序(非常初级):https://github.com/aarongreenlee/Learning-backbone.js .如果您更喜欢在该环境中查看代码,可以在此处访问它:https://github.com/aarongreenlee/Learning-backbone.js/commit/ea4e61d934d2f987726720e81c479f9d9bb86e09#diff-2 (初始提交)。

感谢您的宝贵时间和帮助!

最佳答案

好吧,你的 View 可以有一个类似树的引用,但你的模型不应该知道你的 View !

您应该设置您的 View 以监听来自模型的更改事件并让它们做出相应的 react (即重新渲染)。

通过这种方式,您可以避免软件的较低部分(应该坚如磐石的模型)与较高部分( View )之间的交叉引用。经典 MVC 分离。

因此,将您的 addViews、removeViews 移动到 Backbone.View 上,这应该是好的。您将创建一个分层 View 系统,就像 sproutcore 提供的一样。

玩得开心!

关于javascript - 我应该在 Backbone.js 中避免这种情况吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com