1

我有以下内容:

   $scope.modalReset = function () {
        gridService.modalReset($scope);
    }

    $scope.rowAction = function (action, row) {
        gridService.rowAction(action, $scope, row, 'Question');
    }

    $scope.submitItem = function (formData) {
        gridService.submitItem($scope, 'Question', formData);
    }

有没有办法可以更简单地编写这些函数调用。我不打算将它们结合起来。所有功能都是范围对象的一部分。

4

4 回答 4

0

如果您正在寻找封装这些树函数的方法,那么可以想到两种方法。

方法一:with语句(请不要用这种方法,问题多多。)

with ($scope) {
    modalReset = function () {
        gridService.modalReset($scope);
    };

    rowAction = function (action, row) {
        gridService.rowAction(action, $scope, row, "Question");
    };

    submitItem = function (formData) {
        gridService.submitItem($scope, "Question", formData);
    };
}

方法 2:对象文字(这是推荐的方法。)

define($scope, {
    modalReset: function () {
        gridService.modalReset($scope);
    },
    rowAction: function (action, row) {
        gridService.rowAction(action, $scope, row, "Question");
    },
    submitItem = function (formData) {
        gridService.submitItem($scope, "Question", formData);
    }
});

此方法需要一个名为的函数define

function define(obj, props) {
    for (var key in props)
        if (props.hasOwnProperty(key))
            obj[key] = props[key];
}

我希望这有帮助。

于 2013-06-30T09:52:31.420 回答
0

这看起来像您正在使用 AngularJS($scope等)。在这种情况下,angular.extend()像这样使用:

angular.extend($scope, {
  modalReset: function () {
    ...
  },

  ...
});
于 2013-06-30T10:18:52.523 回答
0

有没有办法可以更简单地编写这些函数调用

它们是函数定义,而不是调用 :-) 它们的内容之间没有太多相似之处,因此您当前的方式很好 - 如果您不喜欢三重分配,您可以使用extend其他答案中提出的功能。

但是如果这些gridService方法有一个更统一的签名,比如

$scope.modalReset = function () {
    gridService.modalReset($scope);
};
$scope.rowAction = function (action, row) {
    gridService.rowAction($scope, 'Question', action, row);
};
$scope.submitItem = function (formData) {
    gridService.submitItem($scope, 'Question', formData);
};

那么您可以将其缩短为

["modalReset", "rowAction", "submitItem"].forEach(function(methodName) {
     $scope[methodName] = gridService[methodName].bind(gridService, $scope, "Question");
});
于 2013-06-30T13:25:37.990 回答
0

如果你使用 jQuery,你可以使用$.extend

$.extend($scope, {
    modalReset: function () {
        gridService.modalReset($scope);
    },
    rowAction: function (action, row) {
        gridService.rowAction(action, $scope, row, "Question");
    },
    submitItem = function (formData) {
        gridService.submitItem($scope, "Question", formData);
    }
});
于 2013-06-30T10:05:27.510 回答