Javascript 我在Backbone.js中是否有理由避免这样做?

Javascript 我在Backbone.js中是否有理由避免这样做?,javascript,backbone.js,Javascript,Backbone.js,我越来越喜欢backbone.js。我希望给定模型具有多个视图: 一个列表视图,其中每个模型都有一个具有自己的li元素的视图 显示模型所有详细信息的详细视图 我的问题是,我一直在寻找一种让一种观点与另一种观点沟通的好方法,并选择了以下观点: /** Allow a model to keep track of it's views. **/ Backbone.Model.prototype.addView = function (view) { // Ensure our model

我越来越喜欢backbone.js。我希望给定模型具有多个视图:

  • 一个列表视图,其中每个模型都有一个具有自己的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);
        }
   }
}
/**允许模型跟踪其视图**/
Backbone.Model.prototype.addView=函数(视图){
//确保我们的模型有一个视图数组。
if(typeof this.views==‘未定义’)
{
this.views=[];
}
//仅当阵列尚未存在时,才将我们的最新视图附加到该阵列。
if(u.indexOf(this.views,view)=-1)
{
this.views.push(视图);
}
}
/**允许模型删除其所有视图。
* 
*@param{Object}args任何参数都将提供给视图的方法。
*/
Backbone.Model.prototype.unloadViews=函数(args){
var n=(typeof this.views=='undefined')?0:this.views.length;
对于(变量i=0;i
我的问题

  • 在我学习backbone.js的过程中,我是否遗漏了一些东西,这些东西可以让我在本地完成这项工作
  • 我有什么理由避免这样做吗
  • 其他信息

    我已经在GitHub上共享了这个应用程序(相当初级)。如果希望在该环境中查看代码,可以在此处访问:(初始提交)


    谢谢你的时间和帮助

    文档云的杰里米·阿什凯纳斯(Jeremy Ashkenas)在推特上给出了答案

    @aarongreenlee没有理由回避它 --如果您想让视图彼此保持树状引用, 这当然是合法的-@贾什凯纳斯


    你的视图可以有一个类似树的引用,但是你的模型不应该知道你的视图

    您应该将视图设置为侦听来自模型的更改事件,并让它们做出相应的反应(即重新渲染)

    通过这种方式,您可以避免在软件的较低部分(应该是坚固的模型)和较高部分(视图)之间进行交叉引用。经典的MVC分离

    所以把你的addViews,removeViews移到Backbone.View,这应该很好。您将创建一个层次化视图系统,很像sproutcore提供的


    玩得开心

    +1,让我打开Backbone.js。