Backbone - 为同一集合使用不同的视图或模板

时间:2014-01-23 10:09:21

标签: backbone.js backbone-views

我的应用程序的基本模型具有status属性。 我们假设,为简单起见,该状态可能是待定已删除

我有一个带有这两个状态值的上层菜单,当您单击其中一个时,您会看到具有此状态的所有对象(我使用路由器触发过滤器)。

我的问题是我需要为每个状态绘制一个不同的模板。

  • 已删除对象永久删除恢复按钮
  • 待处理的对象有删除编辑和其他一些按钮(也有一些textarea ...)

我想知道这个问题的最佳解决方案是什么 我想为每个状态创建一个不同的视图,但后来我不知道如何在集合级别处理它 我还考虑过创建不同的模板并在模型视图级别处理它,但是再次 - 我不知道它是否可能,如果是 - 如何。

最后,我可以使用相同的模板和视图解决它,隐藏视图中不必要的内容,但是在我看来代码变得非常难看。

想法?谢谢!

1 个答案:

答案 0 :(得分:2)

如果要为每种状态创建不同的视图,可以这样做:

Router {

    clickDeletedMenu : {

        var collection = new MyCollection();
        var deletedView = new DeletedView({ model : collection });

        collection.fetch({ status : 'deleted' }); // filter deleted objects
    },

    clickPendingMenu : {

        var collection = new MyCollection();
        var pendingView = new PendingView({ model : collection });

        collection.fetch({ status : 'pending' }); // filter deleted objects
    },

}

如果您想创建不同的模板,可以这样做:

View {

    render : {

        if (this.model.status == 'deleted') {
            // render deleted template
        } else {
            // render pending template
        }
    }
}

最后,在我看来,您可以使用相同的模板和视图,并隐藏模板内不必要的视图。

nb :代码仅用于说明这个想法,它不会执行:)