骨干集合和多个子视图设计问题

时间:2013-10-10 06:51:05

标签: javascript design-patterns backbone.js backbone-collections

嗨我有骨干收藏和子视图的设计问题。

我的问题是我有一个三级以下的子视图,需要一个图像集合,我从父视图三层向上传递。 我不喜欢这个,因为它创建了一系列源自父视图的依赖项。

目前,我的图片集需要business_id来生成网址/商家/商业ID /图片。我通过子视图向下传递集合,因为我没有全局可用于渲染子视图的business_id。

我应该使business_id全局可用,这样子视图可以在没有传递给business_id的情况下实例化集合吗?我不确定我是否应该这样做,因为如果我忘记它们,全局变量声明可能会导致未来的问题。但是,如果它可用,我可以避免通过几个视图传递我的图像集。

如何在不进行全局声明的情况下将business_id提供给子视图?建议?意见?

更新10/27/2013:

这是我最终使用的:

App.BusinessHelper = function (bizId) {
  var bizId = bizId;
  var obj = {};

  obj.getBizId = function () {
     return bizId;
  }

  App.BusinessHelper = obj;
}

我喜欢这种结构,因为bizId不容易改变或改变。也就是说,我创造了自己对这个物体的巨大依赖,但在我的情况下它是值得的。

2 个答案:

答案 0 :(得分:2)

如果您不想将business_id设为全局(这当然是一个好主意),您可以通过将其提供给您在创建它们时实例化的视图来避免这种情况。

var myView = new MyView({business_id: 10});

如果myView负责创建其子视图,那么它就是最佳选择。如果您的代码架构是理智的,那么传递给构造函数的数据总是提供上下文,即。对于相同类型的视图通用的所有内容都将在“类”声明中定义。依赖于上下文的任何内容都作为构造函数参数提供。 business_id显然是一个背景。

您可能知道business_id将在视图中以options的属性显示。

var MyView = Backbone.View.extend({
    initialize: function() {
        this.subView = new SubView({
            business_id: this.options.business_id, 
            foo: 'bar'
        });
    }
});

答案 1 :(得分:1)

通常我声明一个像这样的全局对象。

var App = {};

我附上了我需要全球访问的东西。例如,在您的情况下,我会附加business_id,如下所示,并在我需要的任何地方访问它。你无法避免这些情况。

App.business_id = 15;