1

嗨,我有骨干集合和子视图的设计问题。

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

目前,我的图片集需要一个 business_id 来生成 URL /business/the-biz-id/images。我通过子视图传递集合,因为我没有全局可用于渲染子视图的 business_id。

我是否应该使 business_id 全局可用,以便子视图可以实例化集合而无需将 business_id 传递给它?我不确定我是否应该这样做,因为如果我忘记全局变量声明可能会导致未来的问题。但是,如果它可用,我可以避免通过多个视图传递我的图像集。

如何在不进行全局声明的情况下使 business_id 可用于子视图?建议?意见?

2013 年 10 月 27 日更新:

这就是我最终使用的:

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

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

  App.BusinessHelper = obj;
}

我喜欢这种结构,因为 bizId 不能轻易更改或更改。也就是说,我让自己对这个对象产生了巨大的依赖,但在我的情况下,为了方便起见,这是值得的。

4

2 回答 2

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'
        });
    }
});
于 2013-10-10T09:39:39.630 回答
1

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

var App = {};

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

App.business_id = 15;
于 2013-10-10T09:23:57.713 回答