我越来越喜欢骨干。我希望给定模型有多种视图:

  • 一个列表视图,其中每个模型都有具有自己的LI元素的视图。
  • 细节视图显示了模型的所有细节。

我的问题是,我正在寻求一种很好的方法来允许一种观点与另一种观点进行交流并选出以下内容:

/** 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/EA4E61D934D2F9877726720E81C479F9D9BBBB86E09#DIFF-2 (初始提交)。

感谢您的时间和帮助!

有帮助吗?

解决方案

好吧,您的观点可以具有像参考的树一样,但是您的模型不应该知道您的观点!

您应该设置您的视图以收听模型中的更改事件,并使它们做出相应的反应(呈现)。

这样,您就可以避免软件下部(应该是岩石固体,模型)和更高零件(视图)之间的交叉引用。经典MVC分离。

因此,将addViews移动,删除视图到骨链。视图,应该很好。您将创建一个分层视图系统,就像Sprotcore提供的相似之处。

玩得开心!

其他提示

Document Cloud的Jeremy Ashkenas来自Twitter的答案

@aarongreenlee没有理由避免这种情况 - 如果您想让自己的观点保持彼此的类似树,那肯定是合法的。 - @jashkenas

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top