1

我有一个越来越强大的应用程序,有很多变量。当我在更高级别创建一个需要沿袭的变量时,需要花费大量时间来继续编写代码来管理该变量的传递。如果我知道我总是想传递哪些变量(不一定要备份,所以这些不一定是全局的,只是单向的),我可以在初始化函数中编写什么方法来完成此操作,而无需管理命名公约?

这段代码可能在每个级别都最有用,因此当我在父级别创建要传递给子视图的参数时,每个子视图只会遍历参数并将它们附加到传入的名称中。

因此,如果有一个父视图Fruits,它会创建所有子视图Oranges,并在、和中Oranges创建所有Navels和,那么将有一个函数遍历每个属性,并将其自身设置为视图。如果在父视图中创建了 5 个数字属性,则它看起来像, , , , 和在每个级别。Valenciasinitialize(options)OrangesNavelsValenciasoptionsoptionsthis.1 = options.1;this.2 = options.2;this.3 = options.3;this.4 = options.4;this.5 = options.5;

这将允许我仅在父视图中管理名称,虽然我必须知道名称,因为它不会在每个孩子的文件中,但我可以接受,因为属性在整个层次结构中是唯一的,并且可以在将它们传递给子视图之前对任何唯一名称进行操作。

我正在尝试这样的中间子视图:

define([ … ], function( … ){
  return Backbone.View.extend({
    events : { … },
    // options = { 1:thing1, 2: thing2, a: itA, b: itB }
    initialize: function(options){
      if (options) {
        for (var key in options) {
          'this.' + key = options[key];  //Here is the line that would accomplish this
        }
      } else { //…defaults… }
    },
    render: function(){
      // If i needed to manipulate them, I could accomplish this here
      var params = {
         1: this.thing1,
         2: this.thing2,
         a: this.itA,
         b: this.itB
      };
      new childView(params);
    }
  });
});
4

2 回答 2

1

为什么要在视图中进行所有操作。我觉得这是一种不好的做法,因为从技术上讲View应该是完全愚蠢的数据或Model。如果不是,模型和视图将紧密耦合。

而是创建一个模型,将数据转换为您需要的格式。

模型内部有一个parse函数,它会在之前被调用initialize

所以所有的计算都可以在那里进行,使视图无知..

define([ … ], function( … ){
   return Backbone.Model.extend({
        initialize: function() {

        },
        parse: function() {
             // Do your changes here
        }
   });
});
于 2013-07-22T17:43:23.107 回答
0

根据@go-oleg,我使用了括号表示法: this[key] = options[key];

于 2013-09-07T13:39:36.587 回答