将变量和函数传递给ngHandsontable

时间:2015-09-16 06:56:30

标签: javascript angularjs handsontable

我正在尝试将变量和函数传递给hot-column指令,该指令是ngHandsontable.js的一部分,其中我正在使用ng-repeat。在下面的示例中,DATEFORMAT是一个全局变量,getDropdownOptions是与tableMetaData相同的$ scope中的函数,它在热列指令中被识别。

    <hot-table
            data-settings="{colHeaders: colHeaders, afterChange: afterChange, columnSorting: true, sortIndicator: true, manualColumnResize: true, wordWrap: false}"
            data-rowHeaders="true"
            data-dataRows="tableData">
        <hot-column
                data="{{tCol.DATA}}"
                data-ng-repeat="tCol in tableMetaData | orderBy: 'SEQUENCE' | filter: {DISPLAY: true}"
                data-type="{{tCol.TYPE}}"
                data-date-format="DATEFORMAT"
                data-source="getDropdownOptions"
                data-read-only="{{tCol.READONLY}}"
                data-title="'{{tCol.TITLE}}'">
        </hot-column>
    </hot-table>

问题是该指令获取变量并且函数为undefined。发生这种情况是因为在热列的链接中它循环遍历所有属性并且$ eval是它们。这是相关的代码:

    link: function (scope, element, attributes, controllerInstance) {
      var column = {};

      for (var i in attributes) {
        if (attributes.hasOwnProperty(i)) {
          if (i.charAt(0) !== '$' && typeof column[i] === 'undefined') {
            if (i === 'data') {
              column['data'] = attributes[i];
            }
            else {
              if (i!=='ngRepeat') { // this if is my addition in order to allow ng-repeat
                column[i] = scope.$eval(attributes[i]); // this line is part of the original directive
              }
            }
          }
        }
      }
    }

我试图将该函数排除在'$ eval'之外,但只传递了字符串。与变量相同。

我该如何做到这一点?

修改: 我已经设法通过在handontable代码中使用eval而不是$ eval来传递变量。这仍然没有解决如何传递函数。这是eval修复:

    else {
      if (i!=='ngRepeat') {
        if (i == 'dateFormat') {
          column[i] = eval(attributes[i]);

        } else {
            column[i] = scope.$eval(attributes[i]);
        }
      }
    }

0 个答案:

没有答案