在Backbone View上定义变量

时间:2013-09-11 14:41:01

标签: javascript backbone.js

在我的代码View中,我习惯了以下示例:

//for functions
functionName: function(…){…},
//for objects
objectName: function(…){…},
//for returning a function
nameToReturnFunction: function(…){ return {…} },

我如何编写以下内容,而不是在render()或init()?

    var pathFunction = d3.svg.line()
      .x(function (d) {return d.x;})
      .y(function (d) {return d.y;})
      .interpolate('basis'); // bundle | basis | linear | cardinal are also options

我已经在render或init中声明了变量然后使用了this.pathFunction = pathFunction;,但由于没有参数,我认为它应该在View整体上。

在我需要致电pathFunction的各个地方,我想将其称为this.pathFunction。我尝试了以下方法:

pathFunction: function() {
    var pathFunction = d3.svg.line()
      .x(function (d) {return d.x;})
      .y(function (d) {return d.y;})
      .interpolate('basis');    
}

但是这不起作用,因为this.pathFunction是一个函数,它不会返回变量调用在执行.attr('d', pathFunction)之前执行的操作。

1 个答案:

答案 0 :(得分:0)

我对d3 api不是很熟悉,但以下情况应该有效:

pathFunction: function() {
    return d3.svg.line()
      .x(function (d) {return d.x;})
      .y(function (d) {return d.y;})
      .interpolate('basis');    
}

然后你应该像以前一样打电话:.attr('d', pathFunction)

您当前的代码片段正确执行了d3函数,但仅在pathFunction范围内(未将其返回给调用函数)。